日期:2014-05-17  浏览次数:20455 次

谁能详解一下exists同一张表的比较
--生成测试数据

if not object_id('Tempdb..#T') is null
  drop table #T
Go
Create table #T([ID] int,[Name] nvarchar(1),[Memo] nvarchar(2))
Insert #T
select 1,N'A',N'A1' union all
select 2,N'A',N'A2' union all
select 3,N'A',N'A3' union all
select 4,N'B',N'B1' union all
select 5,N'B',N'B2'
Go
--查询语句
Select * from #T a where exists(select 1 from #T where Name=a.Name and id < a.id)

--查询结果
id name memo
2 A A2
3 A A3
5 B B2

我的理解是,exists 里的语句是这样比较的,name =外部表的name 
比如name = A 与外部表#T a比较,那name=A 的记录有三条,即ID=1,2,3 的三条记录,
然后再是条件id <外表a.id 那第1条记录的ID是小于2,3,这样exists条件就成立了,那这条记录 1,A,A1应该显示出来,而结果为什么没显示出来呢?难道不是这样理解的?这到底是怎么执行的?



------解决方案--------------------
SQL code
Select * from #T a where exists(select 1 from #T where Name=a.Name and id < a.id)

--查询结果
id name memo
2 A A2
3 A A3
5 B B2