以下查詢在啓用ONLY_FULL_GROUP_BY
時無效。首先是無效的,因爲在選擇列表名稱不是GROUP BY
條款
mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
沒有GROUP列是違法的命名,如果沒有GROUP BY子句
您可以重新編寫查詢做工精細的
mysql> SELECT name, MAX(age) FROM t GROUP BY name;
或
關閉ONLY_FULL_GROUP_BY和電子恐怖應該消失。
鏈接可以幫助你
- 您可以搜索MySQL的錯誤here
- group-by-functions
- similar post on stackoverflow.com
- another forum where similar problem discussed
- server-sql-mode
UPDATE
這是對您的評論的回答。
But i would like to know more about disabling the Group BY mode in mysql db.
Server SQL Modes
MySQL服務器可以在不同的SQL模式下運行,並能運用不同的模式,爲不同的客戶,這取決於sql_mode
系統變量的值。此功能使每個應用程序都可以根據自己的需求量身定製服務器的操作模式。
要設置在服務器啓動時的SQL模式,使用命令行上--sql-mode="modes"
選項或sql-mode="modes"
在選項文件如my.cnf (Unix operating systems)
或my.ini (Windows)
。模式是用逗號分隔的不同模式的列表。要明確清除SQL模式,請在命令行上使用--sql-mode=""
或在選項文件中使用sql-mode=""
將其設置爲空字符串。
要在運行時更改SQL模式,使用
SET [GLOBAL|SESSION] sql_mode='modes'
語句設置的sql_mode系統變量。設置GLOBAL變量需要SUPER特權,並影響從此時開始連接的所有客戶端的操作。設置SESSION變量僅影響當前客戶端。任何客戶端可以隨時更改自己的會話sql_mode值。
要確定當前的全球或會話的sql_mode值,可以使用下面的語句:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
你可以參考sql_mode table
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
這是因爲MySQL版本。什麼是您的本地計算機的MySQL版本?
如何檢查MySQL版本?
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
出於測試的sql_mode ONLY_FULL_GROUP_BY
,我創建的表patient
有兩列id, name
和插入的記錄。記住sql_mode ONLY_FULL_GROUP_BY
不是默認設置,你需要設置,如果你想。
1)MySQL版本5.0.45 社區-NT
SELECT name, MAX(id) FROM patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
它失敗了,就在的sql_mode設置爲ONLY_FULL_GROUP_BY
,因爲它不會允許未在名爲非聚合列沒有點GROUP BY子句。
2)MySQL版本5.1.40社區
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
然後設置的sql_mode ONLY_FULL_GROUP_BY
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
3後),MySQL版本5.5。28
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
然後設置的sql_mode後ONLY_FULL_GROUP_BY
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
結論
正如你可以看到查詢失敗的5.0.45版本,和/後5.1.40和5.5上成功.28 在沒有GROUP BY
的MySQL版本5.1.10(not sure)之前查詢失敗,不管sql_mode ONLY_FULL_GROUP_BY
是否設置。
一些有趣的錯誤和常見問題的sql_mode鏈接
- ONLY_FULL_GROUP_BY sql mode is overly restrictive
- sql-mode: only full group by mode not working
- MySQL 5.0 FAQ: Server SQL Mode
似乎是一個語法問題。你的SQL查詢是什麼樣的? – orique
查詢是使用JPA Criteria實現的,並且它與具有與本地機器相同數據源的遠程數據庫服務器正常工作 – user1010399
我假設遠程數據庫也是MySQL。數據庫之間有任何顯着差異主要版本或左右... – orique