【发布时间】:2018-05-30 17:09:23
【问题描述】:
我有一个基本的键值表,其中包含每个用户的一些数据。使用更新后的 mysql,当您进行分组时,它会将 sql_mode 设置为 only_full_group_by(新默认值)。当我尝试运行这个简单的查询时:
select * from user_features
where user_id = 1
group by feature_key
我收到以下错误:
SQL 错误 (1055):SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“date.user_features.user_id”;这与 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 中这将是一个有效的查询并返回一行(我相信红色会被填充)。
-
您对红色的看法,必须有一些理由或标准来选择具有红色的行,或者将您的唯一索引限制为 user_id 和功能键,这样每个用户就不能有2 个相同的功能键
标签: mysql sql mysql-error-1055