[英]Is ORDER BY <column position> okay to use?
我被告知 SQL 中的ORDER BY
子句用於排序查詢。 我只了解了使用列名或表達式,但在查看 MariaDB help
參考SELECT
,我看到了:
MariaDB> HELP 'SELECT';
Name: 'SELECT'
Description:
Syntax:
SELECT
…
[ORDER BY {col_name | expr | position}
…
因此,我查看了他們的在線文檔,並閱讀了有關向ORDER BY
提供列的 integer position 而不是其名稱的信息。
您還可以使用單個 integer 作為排序表達式。 如果使用 integer n,則結果將按 select 表達式中的第 n 列排序。 1
當然,它很好用,我使用它也沒問題,我和我的同學分享了它。 后來,在瀏覽 Oracle MySQL 文檔時,我發現它已被棄用:
不推薦使用列位置,因為語法已從 SQL 標准中刪除。 2
此功能是否有從 SQL 完全刪除的危險,我應該停止使用它嗎?
我認為每個數據庫都支持位置 arguments。 即使在聲稱棄用它們的數據庫中(例如 Oracle 和 SQL 服務器),我懷疑它們是否會被 go 淘汰。 顯然,自 1992 年版本以來,它們就不再是標准的一部分——而是被列別名的使用所取代(這通常更有用)。
我一直認為這個問題是不一樣的:
order by 1 + 1
order by 2
order by coalesce(2, 1)
在第一個和第三個中, order by
是一個常數 - 因此不是排序。 事實上,當您考慮時,它變得更加混亂:
order by '1'
order by 1
order by '1' + 0
再一次,第一個和第三個沒有排序,但第二個做了。
更復雜的是,在 window 幀中order by 1
排序會將1
解釋為常數。 當您在from
子句中定義 window 框架時,這會變得更加混亂。
所有這些混淆都是一個很好的論據,說明為什么不應該引入它以及為什么代碼應該使用列別名。 也就是說,我坦率地承認我經常使用位置數字編寫代碼,因為它們非常方便。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.