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
中得到了演示
我有 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
中得到了演示