在MySQL中执行查询时只与_FULL_GROUY相关的错误

在MySQL中执行查询时只与_FULL_GROUY相关的错误

我已经升级了我的系统,并为我正在开发的Web应用程序安装了MySQL5.7.9和php。我有一个动态创建的查询,当在MySQL的旧版本中运行时,它工作得很好。从升级到5.7,我得到了以下错误:

SELECT List的表达式#1不在GROUP BY子句中,而是包含非聚合列‘Support_Desk.mod_user_groups.group_id’,该列在功能上不依赖于GROUP BY子句中的列;这与SQL_MODE=Only_FULL_GROU

请注意MySQL 5.7的手册页,主题是服务器SQL模式.

这是一个给我带来麻烦的查询:

SELECT mod_users_groups.group_id AS 'value', 
       group_name AS 'text' FROM mod_users_groupsLEFT JOIN mod_users_data ON mod_users_groups.group_id = mod_users_data.group_id 
WHERE  mod_users_groups.active = 1 
  AND mod_users_groups.department_id = 1 
  AND mod_users_groups.manage_work_orders = 1 
  AND group_name != 'root' 
  AND group_name != 'superuser' GROUP BY group_name 
HAVING COUNT(`user_id`) > 0 ORDER BY group_name

我在这个问题上做了一些搜索,但我不明白only_full_group_by足够了解我需要做什么来修复查询。我能不能关掉only_full_group_by还有别的事我需要做吗?

如果你需要更多的信息,请告诉我。


宝慕林4294392
浏览 580回答 4
4回答

蓝山帝景

使用ANY_VALUE()若要引用非聚合列,请执行以下操作。从…MySQL 5.7文档:您可以在不禁用的情况下实现相同的效果。ONLY_FULL_GROUP_BY用ANY_VALUE()若要引用非聚合列,请执行以下操作。...此查询可能与ONLY_FULL_GROUP_BY启用,因为选择列表中的非聚合地址列在GROUP BY条款:SELECT name, address, MAX(age) FROM t GROUP BY name;...如果您知道,对于给定的数据集,每个名称值实际上唯一地决定了地址值,那么地址实际上在功能上依赖于名称。要让MySQL接受查询,可以使用ANY_VALUE()职能:SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
打开App,查看更多内容
随时随地看视频慕课网APP