这个sql语句的含义是什么?
select * from tab1 order by (select count(*) from tab2) desc
答案 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
。
查看Oracle,MySQL和SQL Server的小提琴。如果ORDER BY
基于count(*)
,则结果应然后按第三列排序。他们都不是。此外,count(*)+100
无效。