选择列表包含非聚合列

时间:2016-10-19 15:41:33

标签: mysql mysql-error-1055

自更新MySQL以来,我注意到以下查询失败

SELECT u.*, p.name as plan, COUNT(u.id) as totalprojects FROM users u LEFT JOIN plans p ON p.id = access LEFT JOIN maps m ON m.user_id = u.id WHERE u.email = 'john@doe.com'
  

在没有GROUP BY的聚合查询中,SELECT列表的表达式#1   包含非聚合列'kontakt.u.id';这是不相容的   使用sql_mode = only_full_group_by

有没有人知道如何修复此查询以排序错误?

3 个答案:

答案 0 :(得分:2)

你可以做以下两件事之一:

1)更改您的查询,以便聚合select子句中的所有内容。像这样的东西

SELECT u.email, p.name as plan, COUNT(u.id) as totalprojects FROM users u LEFT JOIN plans p ON p.id = access LEFT JOIN maps m ON m.user_id = u.id WHERE u.email = 'john@doe.com' group by u.email;

2)更改sql模式以允许mysql运行您的查询。像这样的东西

[mysqld]
sql_mode = "NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

在my.cnf文件中。

请注意,这会设置各种sql_mode选项。你可以在这里阅读它们:http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html

答案 1 :(得分:2)

在具有Digital Ocean的节点服务器上,我需要编辑的会议文件位于/etc/mysql/mysql.conf.d/mysqld.cnf

添加以下内容

[mysqld] sql_mode = "NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后service mysql restart解决了这个问题。

答案 2 :(得分:0)

最简单的解决方案是ANY_VALUE函数: ANY_VALUE official documentation

SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;