查询属性,其中缺少一个属性

时间:2016-05-28 13:43:19

标签: sql join

我对查询有疑问。 有两个表:

Objects table:
==============
Object ID   Date
1       2016-03-15
2       2016-01-20

Attributes table:
=================
Parent ID   Attribute   AttributeData
1       Size        XL
2       Size        S
2       Price       20

The query is to join the data to get this:
==========================================
Objet ID    Size    Price
1       XL  NULL
2       S   20

But I only get this:
==========================================
Objet ID    Size    Price
2       S   20

LEFT JOIN没有帮助 - 因为属性表中没有ID1价格的条目。

我很抱歉这样的新手。

很高兴得到任何帮助。

斯特芬

1 个答案:

答案 0 :(得分:2)

我认为条件聚合可以满足您的需求:

select parentid,
       max(case when attribute = 'Size' then attributedata end) as size,
       max(case when attribute = 'Price' then attributedata end) as price
from attributes
group by parentid;

使用left join即可:

select o.*, s.attributedata as size, p.attributedata as price
from objects o left join
     attributes s
     on o.objectid = s.parentid and s.attribute = 'Size' left join
     attributes p
     on o.objectid = p.parentid and p.attribute = 'Price';

请注意,要使其工作,属性名称的条件必须在on子句中,而不是where子句。