我有2张表A和B.
SELECT COUNT(*) FROM (SELECT * FROM tableA)
返回389
SELECT COUNT(*) FROM (SELECT * FROM tableB)
返回217
SELECT COUNT(*) FROM
(SELECT * FROM tableA
INTERSECT
SELECT * FROM tableB)
返回0
SELECT COUNT(*) FROM
(SELECT * FROM tableA
MINUS
SELECT * FROM tableB)
返回389
SELECT COUNT(*) FROM
(SELECT * FROM tableB
MINUS
SELECT * FROM tableA)
重新调整89
有人可以解释为什么最后一个查询返回89而不是217?
答案 0 :(得分:19)
MINUS获取第一个结果集,并删除第二个结果集中存在的任何结果集; 它还会删除所有重复项。
在您的示例中,tableA有389行,tableB有217行;你的INTERSECT显示没有共同的行,这意味着tableA MINUS tableB是389行(即所有行)。
tableB MINUS tableA返回tableB中不同的行集,因此tableB中有89个不同的值。
答案 1 :(得分:10)
假设您已设置A和B, A = {1,2,3,4}和count(A)= 4, B = {5,6,6,7,7}且计数(B)= 5
A-B = {1,2,3,4}因此计数(A-B)=计数(A)= 4
但是B-A = {5,6,7}并且计数(B)= 3
因此,我们在此理解的是,减去了重复的术语(或行)。这就是行数从217减少到89的原因。
希望这有帮助。