MySQL union/full 外连接未返回预期结果

MySQL union/full outer join not returning expected results

我有 2 个 table 列表,其中一个列出了人员及其与他们的财产的关系,还有一个 table 的财产列表(名字、姓氏等)。

人table中的每个人不一定都拥有属性table中列出的所有属性。我想要的是每个人返回每 属性 一行,无论他们是否有 link。

例如

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 个姓氏空行。这个查询可能吗?这是MySQL/MariaDB.

我想你想加入 person table 到 properties table 两次才能让它工作。可能是这样的:

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

中得到了演示