日期:2014-05-18  浏览次数:20467 次

请教 all
请问下面这个sql是什么意思?

select   *  
from   student
where   id   > =   all(   select   id   from   student)

感觉上应该等价于

select   *  
from   student
where   id   =   (   select   max(id)   from   student)

但实际结果不一样,第一个没结果,第二个有一条返回

------解决方案--------------------
结果应该是一样的
------解决方案--------------------
select top 10 IDENTITY(int,1,1) as Id into #t from sysobjects
go
select *
from #t
where id > = all( select id from #t)
go
select *
from #t
where id = ( select max(id) from #t)

经测试是一样的!
------解决方案--------------------
不一样的原因是因为你的student表中存在id为Null的值。

所以> =all的时候返回的是空值。

你在前面加上Set Ansi_NULLs OFF,应该就有值了,或者在条件里加上id is not null,也就有返回值了。



------解决方案--------------------
楼主的这是一个比较子查询,表示的意思应该是这样:查询大于等于所有学生学号的学生的信息.两个sql语句的含义是相同的.
> all的含义是这样的,例子:年龄> all(10,11,16,41),那么满足条件的年龄应该大于括号中所有的值,即满足条件的年龄最小值为42.
依次类推:楼主的子查询先找出所有学生的id,然后找> =字查询结果中所有id的值,自然只有id
最大的满足条件了