1

我正在完成我的网站的实施,但现在我在网上遇到了一个我在本地没有的问题。

我收到此错误:

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_BYof the server

我的在线服务器上的 sql-mode 是空的(我可以通过查询看到select @@sql_mode;)更可以肯定的是,我把sql_mode='' in my.cnf.

但问题依然存在。

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

4

1 回答 1

1

是的。你说的对。发生这种情况是因为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_modeONLY_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 版-社区

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 上/之后成功(正如您在问题中提到的那样)。在 MySQL 版本5.1.10(不确定)GROUP BY之前,无论是否设置了 sql_mode,查询都不会失败ONLY_FULL_GROUP_BY

一些有趣的错误和 sql_mode 常见问题链接

  1. ONLY_FULL_GROUP_BY sql模式过于严格
  2. sql-mode:只有完整的 group by 模式不起作用
  3. MySQL 5.0 FAQ:服务器 SQL 模式
于 2013-10-13T11:30:18.063 回答