问题描述
- 这个SQL语句什么意思啊?
-
select top 50 * from pagetest
where not exists
(select 1 from (select top 9900 id from pagetest order by id)a where a.id=pagetest.id)
order by id
pagetest是表名 a是别名吗? 要是别名的话怎么分的页啊?可以详细介绍一下嘛?大神
解决方案
select top 50 * from pagetest --取50条不在9900中的记录。
where not exists
(select 1 from
(select top 9900 id from pagetest order by id)a --按照id排序,取前9900记录,临时表名a
where a.id=pagetest.id) --如果a中的id和pagetest.id相同,则值为1,否则没值
order by id
解决方案二:
加我吧,大神 756922469
解决方案三:
不是a,表示括号中的子查询。
这个查询什么含义要看业务了,从本身看不出来。
解决方案四:
a是表示按id升序排列的前9900个id,这个查询是查询id不在前9900个的50个记录,即按id升序排列的第9901-9950条记录
解决方案五:
select top 50 * from pagetest
where not exists
(select 1 from (select top 9900 id from pagetest order by id)a where a.id=pagetest.id)
order by id
pagetest是表名 a是别名吗? 要是别名的话怎么分的页啊?可以详细介绍一下嘛?大神
a是pagetest的别名,因为有两个相同的表,所以用别名进行区分,分页是用的top 50来实现的(取前50名)
解决方案六:
这个sql意思是按id进行排序后,取9901-9950条数据(把不在前9900条数据的50条数据取出)
应该是用来实现分页的,你可以修改 50和9900这两个值,实现分页,前一个为一页显示的行数,后一个是控制多少页的数据
解决方案七:
select top 50 * --第三步:select top 50 * 显示50行 条件语句是不存在 第二步中的前9900行,如果表pagetest里面有9950
则如其他网 所说。没有9950行数据,则为空
from pagetest
where not exists
( select 1 --第二步:查看这个select 语句select 1 from a where a.id=pagetest.id 其中a表等于(第一步)
所以 这个条件肯定是相等的(行数如下top 9900) ; select 1 =9900 个1(前提是pagetest有那么多行)
from ( -- 第一步: 肯定先看最里面括号的语句 select top 9900 id from pagetest order id
-- 这样应该懂吧?显示pagetest表中ID栏位的9900行数据
select top 9900 id
from pagetest
order by id
)
a where a.id=pagetest.id
)
order by id
解决方案八:
如果没有第二个SELECT语句,那么是查询不到结果的, TOP 50 虽然显示的是50笔数据,但是实际行数依然是表的总行数
有第二个SELECT语句,可以查询到,相当于在创建一个50行的新表