mysql – 如何使用only_full_group_by修复查询组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 如何使用only_full_group_by修复查询组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2103字,纯文字阅读大概需要4分钟。
内容图文
![mysql – 如何使用only_full_group_by修复查询组](/upload/InfoBanner/zyjiaocheng/899/3595265596774f35bfb346d682a723d0.jpg)
我有一个基本的键值表,每个用户都有一些数据.使用更新的mysql,当你执行分组时,它将sql_mode设置为only_full_group_by(新的默认值).当我尝试运行这个简单的查询时:
select * from user_features
where user_id = 1
group by feature_key
我收到以下错误:
SQL Error (1055): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘date.user_features.user_id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
使用此示例数据,我想基于feature_key进行分组(一旦修复了组错误,我将添加group_concat).
| user_id | feature_key | feature_value |
+---------+-------------+---------------+
| 1 | color | red |
+---------+-------------+---------------+
| 1 | age | 15 |
+---------+-------------+---------------+
| 1 | color | blue |
+---------+-------------+---------------+
该表如下所示:
CREATE TABLE `user_features` (
`user_id` int(10) unsigned NOT NULL,
`feature_key` varchar(50) NOT NULL,
`feature_value` varchar(50) NOT NULL,
UNIQUE KEY `user_id_feature_key_feature_value` (`user_id`,`feature_key`,`feature_value`)
)
我可以运行什么查询来修复此问题或我需要添加哪些索引?
解决方法:
这是MySQL用户的常见错误.在MySQL 5.7中,默认情况下,数据库强制执行大多数其他SQL数据库多年来一直强制执行的标准语义.
规则是选择列表中的每一列必须是以下之一:
>以GROUP BY子句命名;也就是说你正在分组.
>在MIN,MAX(),SUM(),GROUP_CONCAT()等聚合函数内部.
>在功能上依赖于您要分组的列(这是MySQL对标准SQL行为的扩展,而其他SQL数据库不一定支持这一点).
在您的查询中(我将展开您的SELECT *):
select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key
您按feature_key分组,但这意味着其他列不符合我上面描述的规则.
这是一种解决方法:
select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key
使用MAX(user_id)似乎是多余的,因为根据WHERE子句条件,只有一个值可能.但也没有任何伤害. MIN(user_id)也可以.
另请参阅我过去在同一错误中的答案:
> https://stackoverflow.com/a/47701851/20860
> https://stackoverflow.com/a/38705647/20860
内容总结
以上是互联网集市为您收集整理的mysql – 如何使用only_full_group_by修复查询组全部内容,希望文章能够帮你解决mysql – 如何使用only_full_group_by修复查询组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。