Mysql

在 MySQL 5.7.13 與 5.7.11 中容忍 SQL 錯誤(orderby not in distinct,select not in group by)

  • August 18, 2020

這個問題與以下2個SQL錯誤有關(我添加的換行符)

MySql.Data.MySqlClient.MySqlException (0x80004005):
Expression #2 of ORDER BY clause is not in SELECT list, references column 'auitool2014.a.prog' which is not in SELECT list;
this is incompatible with DISTINCT


MySql.Data.MySqlClient.MySqlException (0x80004005): 
Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'H.C51' which is not functionally dependent on columns in GROUP BY clause; 
this is incompatible with sql_mode=only_full_group_by

我的問題很容易描述,即使沒有發布原始 SQL。我有一個5.7.11-log在 Windows 上執行的 Mysql 伺服器,我可以在其中執行SELECT A,B GROUP BY A並且SELECT DISTINCT A,B ORDER BY C沒有任何問題。是的,從 SQL 的角度來看這是錯誤的

但它有效,客戶很高興。它永遠不會被修復在未來被修復。

5.7.13-log我們剛剛使用 Yum 在 Linux 上安裝了一個全新的標準 Mysql 。現在所有包含此類錯誤的查詢都會中斷。

我環顧四周,似乎Mysql團隊對不正確GROUP BY的s做了一些工作。我試圖禁用完整的分組,但後來我遇到了一個明顯的問題。

我還嘗試從 Windows 框中複製部分 Mysql 配置,但又回到了這兩個問題。

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

我只是想知道如何告訴新的 Mysql 5.7.13 的行為與(錯誤的?)版本 5.7.11 完全相同。我們將嘗試從 Yum 安裝確切的 5.7.11,但這可能需要相當長的時間。所以更清楚一點:我如何擺脫這兩個錯誤,謙虛地考慮到 SQL 語句需要最終修復

和你說的不太一樣:

5.7.5 變更日誌說

“SELECT DISTINCT col1 … ORDER BY col2 形式的查詢被 SQL2003 禁止(隱藏的 ORDER BY 列與 DISTINCT 組合),但在啟用 ONLY_FULL_GROUP_BY SQL 模式時不會被拒絕。”

也許你應該向 bugs.mysql.com 請求一個“模式”來違反 SQL2003,理由是沒有辦法得到你想要的。

引用自:https://dba.stackexchange.com/questions/143619