【问题标题】:Non-grouping field used in HAVING clause with sub query带有子查询的 HAVING 子句中使用的非分组字段
【发布时间】:2017-12-22 03:27:21
【问题描述】:

在启用 ONLY_FULL_GROUP_BY 选项的 MariaDB 上,我收到错误消息

在 HAVING 子句中使用了非分组字段 'vcount'

执行查询时

SELECT c.* FROM 
automobile_company c 
LEFT OUTER JOIN (SELECT company_id, COUNT(*) AS vcount FROM automobile_variant GROUP BY company_id) vc
USING (company_id) 
WHERE c.automobile_type = 0 AND vc.vcount > 0;

但是查询甚至没有HAVING 子句。

  • 是因为 MariaDB 正在重写查询以进行优化吗?
  • 是否可以在不将 GROUP BY 移到子查询之外的情况下重写上述查询?
  • 我唯一的选择是使用没有子查询的简单 LEFT OUTER JOIN,并在 GROUP BY 子句中提及需要选择的每个字段吗?

【问题讨论】:

  • 它看起来像是 10.2 中新优化中的一个错误(您显然正在使用它)。作为一种解决方法,尝试设置optimizer_switch='condition_pushdown_for_derived=off'。请在jira.mariadb.org 提交错误报告。

标签: mysql group-by mariadb


【解决方案1】:

如果只需要检查汽车变量中是否存在一行,则不需要计数或分组依据

    SELECT c.* FROM automobile_company c WHERE c.automobile_type = 0 AND 
    EXISTS(select company_id from automobile_variant av where av.company_id=c.company_id);

【讨论】:

  • 感谢您的回答。我更感兴趣的是完整的解决方案,而不是这个单一的实例。
猜你喜欢
  • 1970-01-01
  • 2016-03-27
  • 2018-05-01
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多