Требуется 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
Другие вопросы по тегам