0

我可以使用一些帮助。这是一个现实生活中的问题,而不是家庭作业。我尝试了各种外连接和联合语句,但我只是弄得一团糟。

我有 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'

现在我需要一个语句,为给定的项目 id 生成一个属性表,为每个属性类型显示一行,即使没有为该项目设置所有属性,例如,如果我对项目 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

并随时提出更好的问题标题。如果我知道如何更好地为这个问题命名,我可能会通过搜索自己找到答案。

4

1 回答 1

2
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
于 2013-10-05T17:59:29.733 回答