首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-03-02 
如何反查出不在当前表的全部数据?有两个表:文件表A和文件文档关系表BA数据:fileIdfileName123456B数据:idf

如何反查出不在当前表的全部数据?
有两个表:文件表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

热点排行