问题描述
|
我有两个表:
T1
1,一
2,b
T2
2,ggg
3,hhh
我希望他们之间的结合能给我所有领域:
1,a,null,null
2,b,2,ggg
null,null,3,hhh
解决方法
MySQL没有
FULL OUTER JOIN
,但是您可以模拟它,例如:
SELECT * FROM T1 LEFT OUTER JOIN T2 ON T1.id = T2.id
UNION ALL
SELECT * FROM T1 RIGHT OUTER JOIN T2 ON T1.id = T2.id
WHERE T1.id IS NULL;
一般来说:
FULL OUTER JOIN = LEFT OUTER JOIN ∪ (RIGHT OUTER JOIN ∖ INNER JOIN)
您需要削减一个内部联接(这里是从右联接开始,但是IMHO并不重要,您选择哪个联接),因为两者都返回相同的内部联接。在这里,您可以:
T1 ::
T2 ::
左外连接::
正确的外部连接::
内部联接::
完整的外连接::
, 如果表具有唯一的(组合)列,则可以在子查询中构建ID列表。然后,您可以使用两个外部联接来模拟完整的外部联接:
select *
from (
select col1
from t1
union
select col1
from t2
) ids
left join
t1
on ids.col1 = t1.col1
left join
t2
on ids.col1 = t2.col1