2

我正在尝试制定一个 SQL FULL OUTER JOIN,它包括表 A 和表 B 中的所有值,但不包括它们之间的共同值。

我搜索了互联网,偶然发现了以下 SQL 代码:

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableA.id IS null 
OR TableB.id IS null

可以这样说明:

在此处输入图像描述

我不确定我是否理解这些IS null部分。是否可以通过简单地说明以下内容作为WHERE条件来执行 SQL?:

WHERE TableA.id <> TableB.id
4

2 回答 2

2

您对 IS NULL 子句有什么不了解的地方?

在 OUTER JOIN (LEFT, RIGHT, FULL) 中,外部表中的列有可能最终为 NULL。

条款

WHERE TableA.id IS null 
OR TableB.id IS null

只是说其中一个 ID 必须为 NULL,即如果您有来自 TableA 的行,则不能存在来自 TableB 的匹配行,反之亦然。

于 2013-02-10T19:48:44.083 回答
0
SELECT Name, ID FROM TableA UNION SELECT Name, ID FROM TableB 
EXCEPT
SELECT Name, ID FROM TableB INTERSECT SELECT Name, ID FROM TableA 

第一个选择从表 A 和表 B 中获取所有行,并将其组合成一个结果集。第二个选择选择两者之间共有的所有行。except 所做的是从第一个选择中选择所有行 - 从第二个选择中选择所有行。

你最终得到的是所有行 - 两个表之间共有的行。

于 2013-02-10T19:55:56.483 回答