我发现this link在视觉上解释了连接,引起了我的注意。
最后一个例子说明如下:
To produce the set of records unique to Table A and Table B,
we perform the same full outer join, then exclude the records
we don't want from both sides via a where clause.
此示例的两个表包含以下内容:
id name id name
-- ---- -- ----
1 Pirate 1 Rutabaga
2 Monkey 2 Pirate
3 Ninja 3 Darth Vader
4 Spaghetti 4 Ninja
查询和结果:
SELECT *
FROM TableA
FULL OUTER JOIN TableB ON TableA.name = TableB.name
WHERE TableA.id IS null
OR TableB.id IS null
输出:
id name id name
-- ---- -- ----
2 Monkey null null
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader
我不明白的是,where子句如何在这些表上找到空ID?
** WHERE TableA.id IS null
OR TableB.id IS null **
可能是这样,在完全连接发生后,在两个表的最终输出中插入一堆空元组(如完全连接所预期的那样),然后where子句将从其中获取空ID?
答案 0 :(得分:1)
外部联接包括一个或两个表中的所有记录,即使没有匹配项。
特别是,即使on
子句的计算结果为非true,全外连接也会返回每个表中的所有记录。另一个表中的列不是null
。因此,您的查询返回一个表中的记录,但不返回两个。
请注意,这可能不是获取此信息的最佳方法,因为重复的连接键可以乘以记录数。