【发布时间】:2017-03-16 09:23:08
【问题描述】:
由于 JSON 支持,我刚刚将 MySQL 升级到 5.7.17。项目中的一些更改需要此升级。只有一个 SQL 查询没有按预期工作。我收到一个错误:
ER_WRONG_FIELD_WITH_GROUP
我用谷歌搜索过,大多数答案是:在 sql 模式下禁用ONLY_FULL_GROUP_BY。但这只是解决问题而不是解决问题。如果我错了,请纠正我。
我的 SQL 出现问题:
SELECT users.*,
GROUP_CONCAT(d_user_link.public_key ORDER BY d_user_link.id) AS linked_devices,
permission_users.group_id,
permission_users.custom_permissions,
permission_groups.group_name,
permission_groups.group_permissions
FROM users
INNER JOIN permission_users
ON permission_users.user_id = users.id
INNER JOIN permission_groups
ON permission_groups.id = permission_users.group_id
LEFT JOIN d_user_link
ON d_user_link.user_id = users.id
AND d_user_link.disabled = 0
WHERE users.id = ?
GROUP BY users.id
d_user_link 没有针对每个用户的结果,因为有些用户可以看到每个设备(d_user_link 是 device-user-link),或者没有任何链接的设备。
我希望你能帮助我解决这个问题。除了禁用 ONLY_FULL_GROUP_BY 之外,我无法通过谷歌搜索得到答案。
谢谢!
【问题讨论】:
-
users.id在您的选择中出现两次,一次出现在users.*中,再次出现为user_group_id。这不是唯一的问题,顺便说一句 -
啊,那是为了测试。它不再在查询中@JohnHC。谢谢!您看到了哪些问题?
-
我认为您需要将来自
permission_groups的group by列作为您选择的一部分。不确定在哪个版本的 MySQL 中引入了此更改,但可能是这个。 MySQL 直到最近才有 GROUP BY 的非标准实现。 -
@ŁukaszKamiński MySQL 仅更改了处理 group by 子句的 default 设置。您也可以配置早期版本的 MySQL 以符合之前的 sql 标准。