很抱歉这个奇怪的标题,但我不知道如何更好地说出来。
我有表Attributes
:
id|Name
-------
1 |att1
2 |att2
3 |...
表Product
:
id|Name
-------
1 |Pro1
2 |Pro2
3 |Pro4
和表格ProductAttribute
:
id|productId|attributeId|value
------------------------------
1 |1 |1 |val11
2 |2 |1 |val21
3 |2 |2 |val22
4 |...
我希望从查询中获得以下结果,基本上我想获取所有产品和所有属性,并且每个产品行都将每个属性显示为一列。
我知道我可以"做"使用join
,但是有很多属性,手动执行这样的操作是不可行的,所以我想动态地使用SQL语言而不是某些外部语言。< / p>
以下是生成的视图/查询的示例:
id|Product name|att1 |att2 |...
-------------------------------
1 |Pro1 |val11|Null |...
2 |Pro2 |val21|val22|...
3 |...
答案 0 :(得分:0)
您只是在寻找透视查询:
SELECT
p.Name,
MAX(CASE WHEN a.Name = 'att1' THEN pa.value END) AS att1,
MAX(CASE WHEN a.Name = 'att2' THEN pa.value END) AS att2
FROM Product p
LEFT JOIN ProductAttribute pa
ON p.id = pa.productId
LEFT JOIN Attributes a
ON pa.attributeId = a.id
GROUP BY
p.id, p.Name;