列表包含未聚合的列'otpallet_pokemonpalet.p.id'

时间:2018-10-14 14:08:39

标签: mysql

有人可以帮我解决以下错误:

  

在没有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中没有超级访问权限...

1 个答案:

答案 0 :(得分:0)

禁用only_full_group_by模式(符合ANSI SQL标准)不是正确的方法。由于使用聚合函数Group_concat()p.id中的常规列(如{{1})中的p.questionSelect,而未提及Group By详细信息,导致出现此错误。

由于此聚合功能,您将获得一行(没有Group By)。但是MySQL无法识别在该行中返回哪个p.idp.question。以前的MySQL版本(<5.7)以前对此很宽容(不符合ANSI标准),但值得庆幸的是,它们现在已将更严格的模式作为默认行为。

您应该通过添加涉及Group Byp.id的{​​{1}}子句来消除歧义。

尝试以下操作:

p.question

还要检查:SELECT list is not in GROUP BY clause and contains nonaggregated column .... incompatible with sql_mode=only_full_group_by