簡體   English   中英

訂購方式<column position>可以用嗎?</column>

[英]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.

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