SQL查询中的HAVING问题

时间:2015-06-26 12:57:36

标签: mysql

想象一下有两列的表(还有更多,但无论如何都不相关):

  `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相同)。

1 个答案:

答案 0 :(得分:2)

根据MySQL 5.5 docs

  

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

您是否尝试在第一个SQL中用HAVING替换WHERE

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