MySQL union / full outer join未返回预期结果

时间:2017-11-09 14:54:54

标签: mysql union full-outer-join

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

1 个答案:

答案 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

中工作