ONLY_FULL_GROUP_BY未设置但仍有错误1140

时间:2013-04-12 11:52:28

标签: mysql group-by sql-mode mysql-error-1140

我正在最终确定我的网站的实施,但现在我遇到了一个我在本地没有的问题。

我收到此错误:

failed: Mixing of GROUP columns (MIN (), MAX (), COUNT (), ...) with no GROUP columns is illegal if there is no GROUP BY clause

SQL查询的结果

我在网上搜索了很多论坛,大多数用户建议更改我不能/不想要的查询,或者他们说这可能是在sql-mode:enabled ONLY_FULL_GROUP_BY服务器

我的sql-mode在我的服务器上是空的(我可以看到查询select @@sql_mode;) 更确切地说,我放了sql_mode='' in my.cnf

但问题仍然存在。

这是由于我的服务器上的mysql 5.0.44版本在线和本地5.1.32(我没有这个错误......)?

1 个答案:

答案 0 :(得分:1)

是。你是对的。这是因为 MySQL版本。
检查我的回答here

如何查看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-community-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-community

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和5.1.32之后/之后成功(正如您在上面提到的那样)。 在没有GROUP BY的MySQL版本5.1.10(not sure)查询失败之前,无论是否设置了sql_mode ONLY_FULL_GROUP_BY

一些有趣的错误和sql_mode faq链接

  1. ONLY_FULL_GROUP_BY sql mode is overly restrictive
  2. sql-mode: only full group by mode not working
  3. MySQL 5.0 FAQ: Server SQL Mode