我有两张桌子,A和B.
两者都有完全相同的列。
我需要在TableA中选择TableB中不是的所有项目。
这是十字路口,对吗?我怎么能这样做?
答案 0 :(得分:6)
假设TableA和TableB具有名称为id的主键。
select TableA.*
from TableA
left outer join TableB on TableB.id = TableA.id
where TableB.id is null;
这将找到表b没有表a的id实例的所有条目。
答案 1 :(得分:4)
您可以使用EXISTS条款
SELECT * FROM TableA
WHERE NOT Exists
(
SELECT Column1 FROM TableB
WHERE TableA.Column1 = Table2.Column1
AND TableA.Column2 = Table2.Column2
....
)
将....替换为两个表中的其余列。
答案 2 :(得分:2)
你的术语有误。 intersection将是表A和表B中的行。您实际要查找的是A和B的relative complement。要获得相对补充,您需要执行antijoin 3}}:
SELECT * FROM TableA EXCEPT SELECT * FROM TableB.
答案 3 :(得分:2)
SELECT ColumnA, ColumnB
FROM TableA
EXCEPT
SELECT ColumnA, ColumnB
FROM TableB
答案 4 :(得分:1)
或NOT IN
SELECT *
FROM TableA
WHERE TableA.Id NOT IN (SELECT TableB.Id FROM TableB)