Требуется SQL-запрос с объединением и / или внешним соединением
Я мог бы использовать некоторую помощь. Это проблема реальной жизни, а не домашнее задание. Я перепробовал все виды внешних объединений и операторов, но я просто напутал.
У меня есть 3 таблицы:
Table "item":
id | name
---------
1 | 'Item 1'
2 | 'Item 2'
Table "property_type":
id | name
------------------
105 | 'Property A'
106 | 'Property B'
107 | 'Property C'
Table "property" (fk stands for foreign key):
id | fk_item | fk_property_type | value
---------------------------------------------------------------------
1044 | 1 | 106 | 'some value for prop B of item 1'
1045 | 2 | 107 | 'some value for prop C of item 2'
Теперь мне нужен оператор, который создает таблицу свойств для данного идентификатора элемента, показывая строку для каждого типа свойства, даже если не все свойства установлены для этого элемента, например, если меня интересует элемент 1, вывод должен быть:
item_name | property_type_name | property_value
------------------------------------------------------------------
'Item 1' | 'Property A' | NULL
'Item 1' | 'Property B' | 'some value for prop B of item 1'
'Item 1' | 'Property C' | NULL
И не стесняйтесь предложить лучшее название вопроса. Если бы я знал, как лучше озаглавить этот вопрос, я бы, вероятно, нашел бы ответ, ища себя.
1 ответ
Решение
SELECT
i . name AS item_name,
pt . name AS property_type_name,
p . value AS property_value
FROM
item AS i
CROSS JOIN
property_type AS pt
LEFT JOIN
property AS p
ON p.fk_item = i.id
AND p.fk_property_type = pt.id
WHERE
i.id = 1 ; -- given item ID