SELECT TOP 27 * FROM [select top 27 url from Url_T order by addtime desc]. AS t
这是order by非主键时返回前27条记录的SQL
大家帮我解释下不?

解决方案 »

  1.   

    select top 27 url from Url_T order by addtime desc是整个查询语句中的一个子查询,逻辑过程是:首先查询出Url_T表中的所有url字段值,并按相应的addtime的值来进行降序排序,排序以后,再返回最前面(或称最顶部)的27个记录。然后将这个字查询的结果命名一个临时表名t。最后再从这个临时表中查询返回最前面的27个记录。因为临时表中最多也就27个记录。所以这个查询语句使用子查询虽然没有错误,但是毫无意义。因为仅它的子查询就已经达到目的了。
    即SELECT TOP 27 * FROM (select top 27 url from Url_T order by addtime desc) AS t 
    等同于select top 27 url from Url_T order by addtime desctop关键字是返回符合条件的前面多少个记录行
      

  2.   

    1楼分析正确。这个SQL的写法是MSSQL的写法,MYSQL的写法是select * from (select  url from Url_T limit 0,27 order by addtime desc) AS t 
      

  3.   

    子查询已经是27个了,为什么还要再一次select啊?
      

  4.   

    这个问题应该到asp和.net那边问才好的。这里大多用mysql的
      

  5.   

    这个临时表的字段也就一个url了吧。没有必要再这样子吧。括号里的就可以了吧。加个*号有点多余了吧
      

  6.   

    对 子查询语句就可以了 
    没有必要用嵌套selecturlfromUrl_T limit0,27orderbyaddtimedesc
      

  7.   

    select top 27 url from Url_T order by addtime desc 
    这里这样的话...会返回所有的记录..order by一个非主键的话..不知道为什么会返回所有的记录..
    不是返回27条 而我试过order by主键的话可以可以返回前27条记录  大家知道什么原因不?
      

  8.   

    这种我常用于基于MSSQL的分页的.不太喜欢 使用存储过程进行分页.SO..SELECT TOP 每页数 * FROM (SELECT TOP xxx(计算的前x+1页记录数) * FROM 表 ORDER BY 排序字段 DESC) AS t1;
      

  9.   

    “计算的前x+1页记录数”的意思是第二页的时候把一+二两页的记录都检索出来?
    那在外面还是TOP 每页数,不还是第一页的内容吗?
      

  10.   

    看仔细了..
    内嵌的 SELECT 是倒序的...