全外连接mySQL - 缺少行

时间:2016-01-03 16:47:39

标签: mysql join full-outer-join

我试图通过左连接模拟mySQL中的完全外连接,并将其与右连接结合起来。

SELECT * FROM auxview_candiNotes AS a
LEFT JOIN auxview_clientNotes AS b ON a.dateAdded = b.dateAdded
UNION
SELECT * FROM auxview_candiNotes AS a
RIGHT JOIN auxview_clientNotes AS b ON a.dateAdded = b.dateAdded

我这样做的原因是因为我正在加入两个表,偶尔其中一个表在特定日期没有值(因此日期未在表中列出)。但是,连接表应显示在其中一个或两个表中出现的所有日期。如果其中一个表不包含特定日期的值,则应返回NULL。

但是,auxview_clientNotes表中的某些日期未列在连接表中。

提前致谢!

1 个答案:

答案 0 :(得分:1)

此方法并非完全外部联接,因为union会删除重复项。当基础表具有重复项时,可以生成重复项。通常,重复删除被认为是“好”的思考,但该方法并不完全等同于full outer join

我更喜欢left join方法:

select candi.*, client.*
from (select dateAdded from auxview_candiNotes union -- intentionally not `union all`
      select dateAdded from auxview_clientNotes
     ) d left join
     auxview_candiNotes candi
     on candi.dateAdded = d.dateAdded left join
     auxview_clientNotes client
     on client.dateAdded = d.dateAdded;
相关问题