请问下面这个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
最大的满足条件了