大家帮忙看看这个SQL的意思..

我不是稻草人 2009-07-02 11:57:45
SELECT TOP 27 * FROM [select top 27 url from Url_T order by addtime desc]. AS t
这是order by非主键时返回前27条记录的SQL
大家帮我解释下不?
...全文
32 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrshelly 2009-07-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 frederic_zhao 的回复:]
引用 10 楼 mrshelly 的回复:

这种我常用于基于MSSQL的分页的.

不太喜欢 使用存储过程进行分页.

SO..

SELECT TOP 每页数 * FROM (SELECT TOP xxx(计算的前x+1页记录数) * FROM 表 ORDER BY 排序字段 DESC) AS t1;

“计算的前x+1页记录数”的意思是第二页的时候把一+二两页的记录都检索出来?
那在外面还是TOP 每页数,不还是第一页的内容吗?
[/Quote]
看仔细了..
内嵌的 SELECT 是倒序的...
frederic_zhao 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mrshelly 的回复:]
这种我常用于基于MSSQL的分页的.

不太喜欢 使用存储过程进行分页.

SO..

SELECT TOP 每页数 * FROM (SELECT TOP xxx(计算的前x+1页记录数) * FROM 表 ORDER BY 排序字段 DESC) AS t1;
[/Quote]
“计算的前x+1页记录数”的意思是第二页的时候把一+二两页的记录都检索出来?
那在外面还是TOP 每页数,不还是第一页的内容吗?
mrshelly 2009-07-06
  • 打赏
  • 举报
回复
这种我常用于基于MSSQL的分页的.

不太喜欢 使用存储过程进行分页.

SO..

SELECT TOP 每页数 * FROM (SELECT TOP xxx(计算的前x+1页记录数) * FROM 表 ORDER BY 排序字段 DESC) AS t1;
我不是稻草人 2009-07-06
  • 打赏
  • 举报
回复
select top 27 url from Url_T order by addtime desc
这里这样的话...会返回所有的记录..order by一个非主键的话..不知道为什么会返回所有的记录..
不是返回27条 而我试过order by主键的话可以可以返回前27条记录 大家知道什么原因不?
hiro13427 2009-07-03
  • 打赏
  • 举报
回复
对 子查询语句就可以了
没有必要用嵌套

selecturlfromUrl_T limit0,27orderbyaddtimedesc
wfnychuan 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dzxccsu 的回复:]
1楼分析正确。这个SQL的写法是MSSQL的写法,MYSQL的写法是
SQL codeselect*from(selecturlfromUrl_T limit0,27orderbyaddtimedesc)ASt
[/Quote]
这个临时表的字段也就一个url了吧。没有必要再这样子吧。括号里的就可以了吧。加个*号有点多余了吧
总哈哈 2009-07-03
  • 打赏
  • 举报
回复
这个问题应该到asp和.net那边问才好的。这里大多用mysql的
nocturne1210 2009-07-03
  • 打赏
  • 举报
回复
子查询已经是27个了,为什么还要再一次select啊?
ooozhihong52ooo 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 daniel75122 的回复:]
select top 27 url from Url_T order by addtime desc是整个查询语句中的一个子查询,逻辑过程是:首先查询出Url_T表中的所有url字段值,并按相应的addtime的值来进行降序排序,排序以后,再返回最前面(或称最顶部)的27个记录。然后将这个字查询的结果命名一个临时表名t。最后再从这个临时表中查询返回最前面的27个记录。

因为临时表中最多也就27个记录。所以这个查询语句使用子查询虽然没有错误,但是毫无意义。因为仅它的…
[/Quote] 正解!!!
dzxccsu 2009-07-03
  • 打赏
  • 举报
回复
1楼分析正确。这个SQL的写法是MSSQL的写法,MYSQL的写法是

select * from (select url from Url_T limit 0,27 order by addtime desc) AS t
ACMAIN_CHM 2009-07-03
  • 打赏
  • 举报
回复

楼上正解
v轻扬v 2009-07-03
  • 打赏
  • 举报
回复
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 desc

top关键字是返回符合条件的前面多少个记录行

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧