我有2个表,其中列出了人员及其与属性的关系以及属性列表(名字,姓氏等)的表格。
人员表中的每个人可能没有属性表中列出的所有属性。我想要的是每个人如果有链接,就会为每个属性返回一行。
例如
Properties Person
prop_id|prop_name person_id|prop_id|prop_value
----------------- -----------------------------------
1 |firstname 10 | 1 | john
2 |lastname 11 | 1 | sean
11 | 2 | connery
我想要的结果就是这个
10 | firstname | john
10 | lastname | null
11 | firstname | sean
11 | lastname | connery
请注意,john / 10有一个姓氏行但是为空。
我认为这个查询会给我结果,但它并没有给我一个我想要的john的空行。
select person_id, prop_value, prop_name
from person
left outer join properties on person.prop_id = properties.prop_id
union
select person_id, prop_value, prop_name
from person
right outer join properties on person.prop_id = properties.prop_id
此查询省略了10 lastname null行。这个查询可能吗?这是MySQL / MariaDB。
答案 0 :(得分:2)
我认为您希望将person
表加入properties
表两次以使其生效。这样的事情可能是:
SELECT DISTINCT p1.person_id, p2.prop_value, prop.prop_name
FROM person p1
CROSS JOIN properties prop
LEFT JOIN person p2 ON p1.person_id = p2.person_id AND prop.prop_id = p2.prop_id
这证明在@ RomainBar的sqlfiddle.com/#!9/3dadb90/7
中工作