SQL查询中HAVING的问题

马丁

想象一下具有两列的表(有更多列,但是与这个问题无关):

  `EAN` bigint(20) unsigned DEFAULT NULL,
  `parameter_id` mediumint(8) unsigned DEFAULT NULL,

此查询不起作用,并返回错误:

SELECT EAN FROM eTovar WHERE EAN GROUP BY EAN HAVING parameter_id IS NULL

查询错误(1054):“具有子句”中的未知列“ parameter_id”

但是此查询有效:

SELECT EAN FROM eTovar WHERE EAN GROUP BY EAN HAVING MIN(parameter_id) != MAX(parameter_id)

我假设出于某种原因,HAVING能够达到MIN(parameter_id),但无法达到干净的parameter_id。为什么?

我有MariaDB 5.5(应该与MySQL 5.5相同)。

ChipsLet的

根据MySQL 5.5文档

在标准SQL中,包含GROUP BY子句的查询不能引用HAVING子句中未在GROUP BY子句中命名的未聚合列。MySQL扩展允许对此类列的引用以简化计算。此扩展假定未分组的列将具有相同的按组值。否则,结果是不确定的。[...]
在某些情况下,即使列值不是唯一的,也可以使用MIN()和MAX()获得特定的列值。

您是否尝试过更换HAVINGWHERE您的第一个SQL:

SELECT EAN FROM eTovar WHERE EAN AND parameter_id IS NULL GROUP BY EAN;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章