2010-11-19 70 views
1

如果我運行下面的查詢:MySQL的訂單通過錯誤

select * from mysql.user order by abcdef; 

的MySQL引發以下錯誤:

ERROR 1054 (42S22): Unknown column 'abcdef' in 'order clause'

如果我運行下面類似的查詢:

select * from mysql.user order by "abcdef"; 

MySQL現在運行查詢並忽略order by子句(因爲mysql.user表缺少一個名爲'abcdef'的列)。

這是MySQL中的錯誤嗎?爲什麼你要這個命令在短語引用時默默地失敗?在不存在的列上運行訂單時,錯誤消息是否適用?

回答

4

它並沒有忽視它,它通過訂單的字符串 「ABCDEF」,而不是列。它完全符合你的要求:用一些任意的字符串排序(它最可能什麼也不做)。

大多數關係型數據庫不接受按常數排序(它沒有意義),但MySQL確實如此。

+0

是的,但什麼順序如果我實際上有一個名爲「abcdef」的列,會發生。那麼「abcdef」的順序會起作用嗎? – David 2010-11-19 16:58:39

+0

它會做和現在一樣的事情,因爲「abcdef」是一個字符串,而不是一列。通過abcdef命令雖然會工作。 – aehiilrs 2010-11-19 16:59:35

+0

+1將此與常見錯字「SELECT 8 FROM Table」進行比較,該錯誤返回...「8」。我見過的所有SQL引擎都將忠實地使用SELECT和ORDER BY常量 - 這種行爲不會偶爾發生。 :) – 2010-11-19 16:59:58

3

當您不使用引號時,它會假定您指的是不存在的列名稱

這是正確的functionallity

-1

通過預計需要的現場訂購,如果你想它提升你把ASC旁邊,如果你想讓它降你把一個遞減像如下

SELECT * 
    FROM mysq.user 
ORDER BY username ASC