*编辑* RDBMS是SQL Server 2012
我有一个存储客户数据的程序。 '客户'是一个具有一些标准属性的对象(例如名称,性别等)。但是,我希望允许程序用户向“客户”添加自定义属性。 (例如眼睛颜色,身高)。
我创建了三个包含以下数据的表:
tblCustomers
customer_id | name | sex
------------+------+-----
1 | Max | M
2 | Tim | M
tblProperties
property_id | label
------------+------
1 | Height
2 | Weight
3 | EyeColor
tblPropertyValues
obj_id | prop_id | prop_value
-------+---------+-----------
1 | 1 | 60
1 | 2 | 84
1 | 3 | Green
2 | 1 | 72
2 | 2 | 94
我想知道一个查询来创建以下结果集:
Customer | Property | Value
---------+----------+------
Max | Height | 60
Max | Weight | 84
Max | EyeColor | Green
Tim | Height | 72
Tim | Weight | 94
Tim | EyeColor | NULL
答案 0 :(得分:2)
CROSS JOIN
需要LEFT JOIN
:
select c.name as Customer, p.label as Property, pv.prop_value
from tblCustomers c cross join
tblProperties p left join
tblPropertyValues pv
on pv.obj_id = c.customer_id and pv.prop_id = p.property_id;
答案 1 :(得分:0)
这可以做你想要的,只要我猜对了你的桌子关系。
SELECT c.name AS customer, p.label AS property, v.prop_value AS value
FROM tblCustomer c
INNER JOIN tblPropertyValues v ON v.obj_id = c.customer_id
INNER JOIN tblProperties p ON p.property_id = v.prop_id
ORDER BY 1, 2
编辑:我使用的ORDER BY
子句与您按预期显示的数据顺序不匹配。我不确定它的基础,所以我不会尝试调整。