2013-03-08 86 views
4

假設我有以下內容的表:MySQL的GROUP BY子句驗證

mysql> select * from test; 
+----+------+ 
| id | val | 
+----+------+ 
| 1 | 1 | 
| 2 | 1 | 
| 3 | 1 | 
| 4 | 1 | 
| 5 | 2 | 
| 6 | 2 | 
| 7 | 2 | 
| 8 | 2 | 
+----+------+ 
8 rows in set (0.00 sec) 

mysql> 

現在我運行錯誤的SQL查詢與group by條款並沒有對id列中的任意聚集和得到錯誤的結果:

mysql> select id, val from test group by val; 
+----+------+ 
| id | val | 
+----+------+ 
| 1 | 1 | 
| 5 | 2 | 
+----+------+ 
2 rows in set (0.00 sec) 

mysql> 

可以mysql客戶端或可能一些其他工具驗證此查詢,併發出錯誤或警告使用group by沒有聚合?

+2

+1關注此 – 2013-03-08 12:03:24

回答

7

是的,你可以這樣做:

要禁用MySQL的GROUP BY擴展,使ONLY_FULL_GROUP_BY SQL模式。

mysql> SET sql_mode = 'ONLY_FULL_GROUP_BY'; 

the documentation here。另外,this section on server modules可能會有所幫助。

+1

+1這應該是默認值。 – eisberg 2013-03-08 12:03:16

1

默認情況下,SQL模式ONLY_FULL_GROUP_BY設置爲禁用。這就是爲什麼你的查詢沒有拋出異常而運行的原因。如果你不希望這樣的行爲與起始mysqld使ONLY_FULL_GROUP_BY模式,

設置SQL模式

  • 您可以設置默認的SQL模式--sql-mode =「modes」 option,or by sql-mode =「modes」 in my.cnf(Unix操作系統)或my.ini(Windows)。模式是用逗號(「,」)字符分隔的不同模式的列表。
  • 通過使用SET [GLOBAL|SESSION] sql_mode='modes'語句來設置sql_mode系統值,您可以在運行時更改SQL模式。例如:
    SET sql_mode = 'ONLY_FULL_GROUP_BY'