Запрос списка реквизитов со значениями или без - PullRequest
0 голосов
/ 29 апреля 2010

Я пытаюсь создать SELECT на трех реляционных таблицах, подобных этим:

table_materials
-> material_id
- material_name

table_props
-> prop_id
- prop_name

table_materials_props
- row_id
-> material_id
-> prop_id
- prop_value

На моей странице я бы хотел получить такой результат, но у меня возникла проблема с запросом:

material    prop A    prop B    prop C    prop D    prop E
wood        350       NULL      NULL      84        16
iron        NULL      17        NULL      NULL      201
copper      548       285       99        NULL      NULL

поэтому запрос должен возвращать что-то вроде:

material   prop_name     prop_value
wood       prop A        350
wood       prop B        NULL
wood       prop C        NULL
wood       prop D        84
wood       prop E        16
// and go on with others rows

Я думал использовать что-то вроде:

SELECT *
FROM table_materials AS m
INNER JOIN table_materials_props AS mp
ON m.material_id = mp.material_id
INNER JOIN table_materials_props AS p
ON mp.prop_id = p.prop_id
ORDER BY p.prop_name

проблема в том, что запрос не возвращает значения NULL, и мне нужен один и тот же порядок prop для всех materials независимо от того, имеют ли значения NULL or not

Надеюсь, этот пример понятен!

1 Ответ

0 голосов
/ 29 апреля 2010

Перекрестное соединение (или внутреннее соединение без условия) всех опций, затем левое объединение их в таблицу ассоциативных сущностей. При левом соединении будут сохранены материалы / материалы, даже если комбинации не существуют в ассоциативной таблице.

Непроверенные:

SELECT * 
FROM table_materials AS m
INNER JOIN table_props as p 
LEFT JOIN table_material_props AS mp 
ON p.prop_id = mp.prop_id 
AND 
m.material_id = mp.material_id;
ORDER BY p.prop_name
...