簡體   English   中英

這個sql語句的含義是什么(按count(*)排序)?

[英]What's the meaning of this sql statement (order by count(*))?

這個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

坦率地說,所有查詢都將以某種未知順序從tab1返回所有記錄。

order by子句有點asinine,因為返回的值將始終是tab2中所有記錄的計數。

我懷疑它缺少了(select count(*) from tab2)部分的where子句。 一些東西(select count(*) from tab2 t where t.tab1id = tab1.id)盡管在不知道這兩個表的結構的情況下很難說。

ORDER BY等同於ORDER BY 'X' ; 也就是說,它沒有任何效果。 它不按第二個查詢中count(*)引用的列號排序 - 如果第二個表有三行, 則不等於order by 3

請參閱OracleMySQLSQL Server的小提琴。 如果ORDER BY基於count(*) ,則結果應按第三列排序。 他們都不是。 此外, count(*)+100無效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM