有人可以帮我解决以下错误:
在没有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中没有超级访问权限...
答案 0 :(得分:0)
禁用only_full_group_by
模式(符合ANSI SQL标准)不是正确的方法。由于使用聚合函数Group_concat()
和p.id
中的常规列(如{{1})中的p.question
和Select
,而未提及Group By
详细信息,导致出现此错误。
由于此聚合功能,您将获得一行(没有Group By
)。但是MySQL无法识别在该行中返回哪个p.id
和p.question
。以前的MySQL版本(<5.7)以前对此很宽容(不符合ANSI标准),但值得庆幸的是,它们现在已将更严格的模式作为默认行为。
您应该通过添加涉及Group By
和p.id
的{{1}}子句来消除歧义。
尝试以下操作:
p.question