这个SQL语句的含义是什么?
select * from tab1 order by (select count(*) from tab2) desc
select * from tab1 order by (select count(*) from tab2) desc
select count(*) from tab2
select * from tab1 order by 1
select * from tab1 order by 2
我希望你能够按第二列等方式排序。如果n大于列数,则会遇到问题。
编辑
然而,您正在使用子查询,并且有
select * from tbl1 order by (select 1000)
如果您的列数<1000,则不会出现问题,但它似乎没有起到作用;查询可能缺少一些信息。
ORDER BY N
或 ORDER BY (N)
表示按第 N 列排序。ORDER BY 100
抛出错误,ORDER BY (100)
也是如此。但是 ORDER BY (SELECT N)
表示按值排序,无害,但在常量 N 的情况下也毫无意义。 - galets答案基于Microsoft SQL的功能 [编辑:]其中ORDER BY(子查询)表达式中的子查询表示排序值。
这是我的理解:由于tab2未在子查询中链接到tab1,因此可以将SQL简化为:
select * from tab1 order by (SELECT <CONSTANT>) desc
select * from tab1
SELECT * FROM tab1 ORDER BY 3
将按第三列排序。你明确表示你的答案基于一个不正确的 DBMS。 - Jeffrey Blakeselect * from dbo.sysobjects order by 1000
(会产生错误),或者 select * from dbo.sysobjects order by 1
(按第一列排序),或者 select * from dbo.sysobjects order by 10
(按第十列排序),我会得到非常不同的排序顺序。 - Jeffrey Blakeselect * from dbo.sysobjects order by (select 1000)
、select * from dbo.sysobjects order by (select 1)
和 select * from dbo.sysobjects order by (select 10)
。 - galetsORDER BY
相当于 ORDER BY 'X'
;也就是说,它没有任何作用。它不会按照第二个查询中 count(*)
引用的列号进行排序——如果第二个表有三行,则它与 order by 3
不等价。
请参见 Oracle、MySQL 和 SQL Server 的示例。如果 ORDER BY
基于 count(*)
,则结果应该按照第三列排序。但实际上并没有。此外,count(*)+100
也没有任何效果。
ORDER BY(标量子查询)
没有任何意义,即使它是相关联的也不行。Order by 1,2,3
是有效的,但1,2,3
需要在"编译时间"进行评估。它可能是一些扩展,但在这种情况下仍然是不好的风格,因为SELECT *
依赖于结果元组中字段的隐含顺序。 - wildplasser