问题
Since updating MySQL I've noticed the following query fails
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'
In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'kontakt.u.id'; this is incompatible with sql_mode=only_full_group_by
Does anyone know how to get this query fixed to sort the error?
回答1:
You can do one of two things:
1) change your query so that everything in the select clause is aggregated. Something like this
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) Change the sql mode to allow mysql to run your query. Something like this
[mysqld]
sql_mode = "NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
in your my.cnf file.
Note that this sets various sql_mode options. You can read about them here: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
回答2:
On my Node server with Digital Ocean the conference file I needed to edit was located /etc/mysql/mysql.conf.d/mysqld.cnf
Adding in the following
[mysqld] sql_mode = "NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
And then service mysql restart
fixes the issue.
回答3:
the easiest solution is ANY_VALUE function: ANY_VALUE official documentation
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
来源:https://stackoverflow.com/questions/40136012/select-list-contains-nonaggregated-column