您的位置:首页 > 数据库 > MySQL

[mysql] Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'lo

2017-01-23 14:01 1501 查看
执行SQL:

SELECT login_name,login_ip,sex FROM tank_admin GROUP BY login_name ;

时抛出异常。

Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'loser.tank_admin.login_ip' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by


这个sql语句违背了sql_mode=only_full_group_by 。

先看看这个sql_mode=only_full_group_by是个什么意思:

(摘自官网文档)

ONLY_FULL_GROUP_BY


Reject queries for which the select list, 
HAVING
 condition, or 
ORDER BY
 list refer to nonaggregated columns that are neither named in the 
GROUP BY
clause nor are functionally
dependent on (uniquely determined by) 
GROUP BY
 columns.

As of MySQL 5.7.5, the default SQL mode includes 
ONLY_FULL_GROUP_BY
. (Before 5.7.5, MySQL does not detect
functional dependency and
ONLY_FULL_GROUP_BY
 is not enabled by default. For a description of pre-5.7.5 behavior,
see the MySQL 5.6 Reference Manual.)

A MySQL extension to standard SQL permits references in the 
HAVING
 clause to aliased expressions in the select list. Before MySQL 5.7.5, enabling
ONLY_FULL_GROUP_BY
 disables
this extension, thus requiring the 
HAVING
 clause to be written using unaliased expressions. As of MySQL 5.7.5, this restriction is lifted so that the 
HAVING
 clause can refer to aliases regardless of
whether 
ONLY_FULL_GROUP_BY
 is enabled.

For additional discussion and examples, see Section 13.20.3, “MySQL Handling of GROUP BY”.

来源链接:

http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by

MySQL Handling of GROUP BY

解决办法:

set @@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

去掉ONLY_FULL_GROUP_BY即可正常执行sql.

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql
相关文章推荐