想象一下有两列的表(还有更多,但与这个问题无关):
`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):“having子句”中的未知列“parameter_id”
但是这个查询是有效的:
SELECT EAN FROM eTovar WHERE EAN GROUP BY EAN HAVING MIN(parameter_id) != MAX(parameter_id)我假设,由于某种原因,已经能够达到最小( parameter_id ),但无法达到干净的parameter_id。为什么?
我有MariaDB 5.5 (应该与MySQL 5.5相同)。
发布于 2015-06-26 13:12:44
在标准SQL中,包含GROUP BY子句的查询不能引用GROUP BY子句中未命名的HAVING子句中的非聚合列。MySQL扩展允许引用此类列以简化计算。此扩展假定非分组列将具有相同的分组分组值。否则,结果是不确定的。..。 在某些情况下,您可以使用MIN()和MAX()获得特定的列值,即使它不是唯一的。
您是否尝试过在第一个SQL中用HAVING替换WHERE:
SELECT EAN FROM eTovar WHERE EAN AND parameter_id IS NULL GROUP BY EAN;https://stackoverflow.com/questions/31074700
复制相似问题