[英]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
。
請參閱Oracle , MySQL和SQL Server的小提琴。 如果ORDER BY
基於count(*)
,則結果應按第三列排序。 他們都不是。 此外, count(*)+100
無效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.