【问题标题】:list contains nonaggregated column 'otpallet_pokemonpalet.p.id'列表包含非聚合列“otpallet_pokemonpalet.p.id”
【发布时间】:2018-10-14 22:24:04
【问题描述】:

谁能帮我解决以下错误:

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

【问题讨论】:

  • WHERE p.status=1 AND NOW() BETWEEN date_start AND date_end GROUP BY p.id, p.question

标签: mysql


【解决方案1】:

禁用only_full_group_by 模式(符合ANSI SQL 标准)不是正确的方法。由于在Select 中使用聚合函数Group_concat() 以及p.idp.question 等常规列,您会收到此错误,而没有提及Group By 详细信息。

由于这个聚合函数,你会得到一个单行(没有Group By)。但是 MySQL 无法确定在这一行中返回哪个 p.idp.question。以前的 MySQL 版本 (

您应该通过添加涉及p.idp.questionGroup 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()
GROUP BY p.id, p.question

另外,请检查:SELECT list is not in GROUP BY clause and contains nonaggregated column .... incompatible with sql_mode=only_full_group_by

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    相关资源
    最近更新 更多