3

这个sql语句可能是什么意思?

select * from tab1 order by (select count(*) from tab2) desc 
4

5 回答 5

4

下面的行只是返回tab2中的行数,这是一些常数

select count(*) from tab2

考虑编号为 1 到 n 的列,其中 n 是最后一列。

select * from tab1 order by 1

将按第一列排序

select * from tab1 order by 2

将按第二列等排序。
如果 n 大于列数,那么您将遇到问题

编辑
但是您正在使用子查询并且具有

select * from tbl1 order by (select 1000)

如果您有 <1000 列,则不会导致问题,它似乎什么都不做;查询可能缺少一些信息

于 2013-08-15T17:20:52.073 回答
3

结果是按索引为ORDER BY子句中内部查询返回的计数的列排序。写这篇文章的人,尤其是没有评论的人,应该被对复制很重要的身体部位绞死。

于 2013-08-15T17:19:17.387 回答
2

答案基于 Microsoft SQL 功能[edit:],其中 ORDER BY(子查询)表达式中的子查询表示排序值。

这是我的看法:由于 tab2 在子查询中未链接到 tab1,因此 SQL 可以简化为:

select * from tab1 order by (SELECT <CONSTANT>) desc 

因此它相当于:

select * from tab1
于 2013-08-15T17:22:18.560 回答
0

ORDER BY相当于ORDER BY 'X'; _ 也就是说,它没有效果。它不按count(*)第二个查询中引用的列号排序——它等同于order by 3第二个表是否有三行。

请参阅OracleMySQLSQL Server的小提琴。如果ORDER BY是基于count(*),则结果应按第三列排序。他们都不是。此外, acount(*)+100没有效果。

于 2013-08-15T18:16:09.230 回答
0

坦率地说,查询要做的就是以未知的顺序从 tab1 返回所有记录。

order by 子句有点笨拙,因为返回的值将始终是 tab2 中所有记录的计数。

我怀疑它缺少一个where条款(select count(*) from tab2)。类似的东西(select count(*) from tab2 t where t.tab1id = tab1.id) 虽然在不知道这两个表的结构的情况下很难说。

于 2013-08-15T17:22:36.193 回答