u013481361
向着梦想进击
2015-01-12 13:21
采纳率: 66.7%
浏览 1.7k

这个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是别名吗? 要是别名的话怎么分的页啊?可以详细介绍一下嘛?大神

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • lzp_lrp
    WorldMobile 2015-01-13 00:37
    已采纳

    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名)

    点赞 评论
  • u012361660
    计算机黎志南 2015-01-12 13:29

    加我吧,大神 756922469

    点赞 评论
  • caozhy

    不是a,表示括号中的子查询。
    这个查询什么含义要看业务了,从本身看不出来。

    点赞 评论
  • save4me
    save4me 2015-01-12 14:56

    a是表示按id升序排列的前9900个id,这个查询是查询id不在前9900个的50个记录,即按id升序排列的第9901-9950条记录

    点赞 评论
  • danielinbiti
    danielinbiti 2015-01-12 15:07

    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

    点赞 评论
  • lzp_lrp
    WorldMobile 2015-01-13 00:38

    这个sql意思是按id进行排序后,取9901-9950条数据(把不在前9900条数据的50条数据取出)

    应该是用来实现分页的,你可以修改 50和9900这两个值,实现分页,前一个为一页显示的行数,后一个是控制多少页的数据

    点赞 评论
  • q421226652
    q421226652 2015-01-15 03:12

    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
    
    点赞 评论
  • q421226652
    q421226652 2015-01-16 02:52

    如果没有第二个SELECT语句,那么是查询不到结果的, TOP 50 虽然显示的是50笔数据,但是实际行数依然是表的总行数
    有第二个SELECT语句,可以查询到,相当于在创建一个50行的新表

    点赞 评论

相关推荐