读书人

怎么反查出不在当前表的全部数据

发布时间: 2012-03-02 14:40:29 作者: rapoo

如何反查出不在当前表的全部数据?
有两个表:文件表A和文件文档关系表B

A数据:
fileId fileName
1
2
3
4
5
6

B数据:
id fileId documentId
1 2
2 3
3 4
4 1

现在我想从A表中找出fileId不在B表的全部数据,从上面的例子看就是查出 5,6 这两条数据,我这样写SQL语句:
select * from A where fileId not in (
select fileId from B
)


但是在数据量大时这样的查询存在严重的效率问题,应该怎样写SQL语句??

谢谢:)

[解决办法]
declare @A table(fileId int,fileName varchar(30))
insert into @A
select 1, ' '
union all select 2, ' '
union all select 3, ' '
union all select 4, ' '
union all select 5, ' '
union all select 6, ' '

declare @B table(id int,fileId int,documentId int)
insert into @B
select 1,2,0
union all select 2,3,0
union all select 3,4,0
union all select 4,1,0

select * from @A
select * from @B
select A.* from @A A left outer join @B B on A.fileId=B.fileId where B.id is null
[解决办法]
做个left join
select *
from a left join b on a.id=b.id
where b.documentId is null

读书人网 >SQL Server

热点推荐