想象一下有两列的表(还有更多,但无论如何都不相关):
`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相同)。
答案 0 :(得分:2)
在标准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;