这个sql语句可能是什么意思?
select * from tab1 order by (select count(*) from tab2) desc
下面的行只是返回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 列,则不会导致问题,它似乎什么都不做;查询可能缺少一些信息
结果是按索引为ORDER BY
子句中内部查询返回的计数的列排序。写这篇文章的人,尤其是没有评论的人,应该被对复制很重要的身体部位绞死。
答案基于 Microsoft SQL 功能[edit:],其中 ORDER BY(子查询)表达式中的子查询表示排序值。
这是我的看法:由于 tab2 在子查询中未链接到 tab1,因此 SQL 可以简化为:
select * from tab1 order by (SELECT <CONSTANT>) desc
因此它相当于:
select * from tab1
ORDER BY
相当于ORDER BY 'X'
; _ 也就是说,它没有效果。它不按count(*)
第二个查询中引用的列号排序——它不等同于order by 3
第二个表是否有三行。
请参阅Oracle、MySQL和SQL Server的小提琴。如果ORDER BY
是基于count(*)
,则结果应按第三列排序。他们都不是。此外, acount(*)+100
没有效果。
坦率地说,查询要做的就是以未知的顺序从 tab1 返回所有记录。
order by 子句有点笨拙,因为返回的值将始终是 tab2 中所有记录的计数。
我怀疑它缺少一个where
条款(select count(*) from tab2)
。类似的东西(select count(*) from tab2 t where t.tab1id = tab1.id)
虽然在不知道这两个表的结构的情况下很难说。