这个简单的SQL Select语句有问题

时间:2009-09-16 01:50:18

标签: sql sql-server sql-server-2005 tsql

我有两张桌子,A和B.

两者都有完全相同的列。

我需要在TableA中选择TableB中不是的所有项目。

这是十字路口,对吗?我怎么能这样做?

5 个答案:

答案 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)