这个sql语句的含义是什么(按count(*)排序)?

时间:2013-08-15 17:18:11

标签: sql

这个sql语句的含义是什么?

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

5 个答案:

答案 0 :(得分: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列,

不会导致问题,它似乎什么都不做;查询可能缺少一些信息

答案 1 :(得分:3)

结果是按列排序,其索引是ORDER BY子句中内部查询返回的计数。任何写这篇文章的人,特别是没有评论的人,都应该被对生殖有重要影响的身体部位绞死。

答案 2 :(得分:2)

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

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

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

因此它相当于:

select * from tab1

答案 3 :(得分:0)

坦率地说,所有查询都是以某种未知顺序从tab1返回所有记录。

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

我怀疑它在where部分缺少(select count(*) from tab2)条款。 (select count(*) from tab2 t where t.tab1id = tab1.id)的某些内容虽然在不知道这两个表的结构的情况下很难说。

答案 4 :(得分:0)

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

查看OracleMySQLSQL Server的小提琴。如果ORDER BY基于count(*),则结果然后按第三列排序。他们都不是。此外,count(*)+100无效。