开发者社区> 问答> 正文

在MySql中执行查询时与only_full_group_by相关的错误

我已经升级了系统,并为正在使用的Web应用程序安装了带有PHP的MySql 5.7.9。我有一个动态创建的查询,当在旧版本的MySql中运行时,它运行良好。自升级到5.7以来,出现此错误:

SELECT列表的表达式#1不在GROUP BY子句中,并且包含未聚合的列'support_desk.mod_users_groups.group_id',该列在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by不兼容

请注意有关服务器SQL模式主题的Mysql 5.7手册页。

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

SELECT mod_users_groups.group_id AS 'value', group_name AS 'text' FROM mod_users_groups LEFT 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选项,还是需要做其他事情?

展开
收起
保持可爱mmm 2020-05-08 10:47:45 645 0
1 条回答
写回答
取消 提交回答
  • 我只是添加group_id到GROUP BY。

    当选择SELECT不属于的GROUP BY列时,组中该列可能有多个值,但结果中只有一个值的空间。因此,通常需要准确告知数据库如何将多个值变成一个值。通常,这是与像一个聚合函数中完成COUNT(),SUM(),MAX()等...我说一般,因为大多数其他流行的数据库系统坚持这一点。但是,在版本5.7之前的MySQL中,默认行为更为宽容,因为它不会抱怨,然后可以任意选择任何值!它也有一个ANY_VALUE()如果您确实需要与以前相同的行为,则可以将该函数用作该问题的另一个解决方案。这种灵活性要付出一定的代价,因为它是不确定性的,因此除非您有充分的理由需要它,否则我不建议您这样做。only_full_group_by由于种种原因,MySQL现在默认情况下会启用该设置,因此最好习惯它,并使您的查询符合它。

    那么,为什么我上面的简单答案呢?我做了两个假设:

    1)group_id是唯一的。似乎合理,毕竟它是一个“ ID”。

    2)group_name也很独特。这可能不是一个合理的假设。如果不是这种情况,并且您有一些重复项group_names,然后按照我的建议添加group_id到中GROUP BY,您可能会发现现在得到的结果比以前更多,因为具有相同名称的组现在在结果中将有单独的行。对我来说,这比隐藏这些重复的组更好,因为数据库已悄悄地选择了一个值!

    当涉及多个表时,最好用表名或别名来限定所有列。

    SELECT g.group_id AS 'value', g.group_name AS 'text' FROM mod_users_groups g LEFT JOIN mod_users_data d ON g.group_id = d.group_id WHERE g.active = 1 AND g.department_id = 1 AND g.manage_work_orders = 1 AND g.group_name != 'root' AND g.group_name != 'superuser' GROUP BY g.group_name, g.group_id HAVING COUNT(d.user_id) > 0 ORDER BY g.group_name来源:stack overflow

    2020-05-08 10:48:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像