首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL查询中出现问题

问在SQL查询中出现问题
EN

Stack Overflow用户
提问于 2015-06-26 12:57:36
回答 1查看 43关注 0票数 0

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

代码语言:javascript
复制
  `EAN` bigint(20) unsigned DEFAULT NULL,
  `parameter_id` mediumint(8) unsigned DEFAULT NULL,

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

代码语言:javascript
复制
SELECT EAN FROM eTovar WHERE EAN GROUP BY EAN HAVING parameter_id IS NULL

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

但是这个查询是有效的:

代码语言:javascript
复制
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相同)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-26 13:12:44

根据MySQL 5.5文档

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

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

代码语言:javascript
复制
SELECT EAN FROM eTovar WHERE EAN AND parameter_id IS NULL GROUP BY EAN;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31074700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档