在一个表中查找不在另一个表中的记录

时间:2012-10-16 10:35:21

标签: sql-server

我有两张桌子。一个有102845个记录,另一个有98496个。我需要找到出现在较大表中但不在较小表中的记录(4349)。 这些是我创建数字的方式:

- 98496

drop table #test2
select a.*, B.Delq_Sep12, b.Bal_Sep12, b.Queue_Sep12 
into #test2
from #test4 b
join pcd a on  (a.ACCOUNT_NUMBER = B.account_number)

- 102845

drop table #test1
select a.*, B.Delq_Sep12, b.Bal_Sep12, b.Queue_Sep12,
into #test1
from #test4 b 
left join pcd a on  (a.ACCOUNT_NUMBER = B.account_number)

由于

2 个答案:

答案 0 :(得分:1)

select * from #test1
except
select * from #test2

当然,这假设#test2中的所有记录都在#test1

如果您想反过来检查,只需反转查询。

select * from #test2
except
select * from #test1

答案 1 :(得分:0)

显然,您的第一个查询只获得两个表中匹配的行。第二个获取b的所有行,同时还从匹配的a中提取数据,如果没有匹配,a列将填充NULL。

现在,两个结果集之间的差异实际上是b的不匹配行。要获得这些行,您可以使用像我这样的NULL检查来使用第二个查询:

select a.*, B.Delq_Sep12, b.Bal_Sep12, b.Queue_Sep12,
from #test4 b 
left join pcd a on  (a.ACCOUNT_NUMBER = B.account_number)
where a.ACCOUNT_NUMBER is null

也就是说,不需要#test1#test2,只需直接查询不匹配的行。