mysql - 列表包含非聚合列“otpallet_pokemonpalet.p.id”
问题描述
有人可以帮我解决以下错误:
在没有 GROUP BY 的聚合查询中,SELECT 列表的表达式 #1 包含非聚合列“otpallet_pokemonpalet.p.id”;这与 sql_mode=only_full_group_by 不兼容
SELECT p.id, p.question,
GROUP_CONCAT(a.answer SEPARATOR ';') AS answers,
GROUP_CONCAT(a.id SEPARATOR ';') AS answers_id
FROM poll p
JOIN poll_answer a ON p.id = a.poll_id
WHERE p.status = 1 AND date_start <= NOW() AND date_end >= NOW()
我试图仅禁用组模式,但我在 cpanel 中没有超级访问权限...
解决方案
禁用only_full_group_by
模式(符合 ANSI SQL 标准)不是正确的方法。由于在和之Group_concat()
类的常规列旁边使用聚合函数,您会收到此错误,但没有提及细节。p.id
p.question
Select
Group By
由于此聚合功能,您将获得单行(不带Group By
)。但是 MySQL 无法确定哪一行p.id
并p.question
返回该行。以前的 MySQL 版本(< 5.7)曾经对此很宽容(不符合 ANSI 标准),但幸运的是,他们现在将更严格的模式作为默认行为。
您应该通过添加涉及and的Group By
子句来真正消除查询的歧义。p.id
p.question
尝试以下操作:
SELECT p.id, p.question,
GROUP_CONCAT(a.answer SEPARATOR ';') AS answers,
GROUP_CONCAT(a.id SEPARATOR ';') AS answers_id
FROM poll p
JOIN poll_answer a ON p.id = a.poll_id
WHERE p.status = 1 AND date_start <= NOW() AND date_end >= NOW()
GROUP BY p.id, p.question
另外,请检查:SELECT 列表不在 GROUP BY 子句中并且包含非聚合列 .... 与 sql_mode=only_full_group_by 不兼容
推荐阅读
- tsql - 获取正在运行的工作站客户端应用程序的 FQDN
- perl - 更高版本的 Perl 上的 JSON::encode_json 问题
- c# - Automapper ForMember MapFrom 似乎不起作用
- html - Microsoft Word Verdana 字体在基于 HTML 的 PDF 上呈现不同
- javascript - 甜甜圈(仪表)的自定义背景限制
- physics - matter.js - 监视器影响引擎物理
- craftcms - Craft2:图像未从“cpresources/”正确加载
- java - java bufferedreader结合ready(),read()不返回-1
- react-native - 在本机反应中将资产中的图像转换为base64
- c++ - 在运行时更改 const wchar_t*