【MySQL distinct的使用】如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就必须出现在选择列表中
錯誤語句
SELECT distinct example_column1 FROM test.example_table where delisting_date>now() and product ='CU.SHF' ORDER BY `example_column2` ASC;報錯信息如下:(MySQL-8.0.16可以正常運行,MySQL-5.7報錯)
Error Code: 3065. Expression #1 of ORDER BY clause is not in SELECT list, references column ‘test.example_table.example_column2’ which is not in SELECT list; this is incompatible with DISTINCT 0.016 sec
正確語句
SELECT distinct example_column1, example_column2 FROM test.example_table where delisting_date>now() and product ='CU.SHF' ORDER BY `example_column2` ASC;查詢結果
原因解釋
MySQL中,如果同時用order by和distinct,那order by后面的字段就必須出現在selcet的字段中。
為什么會出現這種情況?我們來看下原因:
distinct自帶排序功能,會先按照distinct后面的字段進行排序,而order by是可以改變distinct自帶的排序,所以原因其實就是一個執行先后順序問題,沒有distinct時,order by先執行,select后執行,有了distinct,selcet distinct先執行,order by后執行,如果select distinct執行完后,去除了相應字段,所以order by就沒法排序了。
如果你不明白distinct是怎么排序和去重復的,去看下SQL的執行計劃就明白了。
總結
以上是生活随笔為你收集整理的【MySQL distinct的使用】如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就必须出现在选择列表中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Git】切换分支,以及git stas
- 下一篇: 【Python 2.7】str和unic