首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >>=All与MAX的sql差异

>=All与MAX的sql差异
EN

Stack Overflow用户
提问于 2015-02-27 05:50:27
回答 2查看 1.6K关注 0票数 2

两者有什么区别?

报表1:

代码语言:javascript
复制
SELECT continent, name, area FROM world x
  WHERE x.area >= ALL
    (SELECT y.area FROM world y
    WHERE y.continent=x.continent)

报表2:

代码语言:javascript
复制
SELECT continent,name,area FROM world x
WHERE x.area =(SELECT MAX(y.area) FROM world y
WHERE y.continent=x.continent)

它似乎给了我不同的结果,如下所示。

关于报表1:http://s8.postimg.org/6t8588cz9/ss1.jpg

关于报表2:http://s4.postimg.org/5lfo10xul/ss2.jpg

>=不都在逻辑上等同于选择MAX()吗?

使用MAX的第二条语句返回第一条语句的超集。(与第一条语句相比,结果更多),我不知道为什么会这样。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-27 07:03:52

这个特定数据集的问题是,像“非洲”和“欧洲”这样的一些大陆的区域数据为零(例如,欧洲的荷兰)。

将area>0添加到第一个查询中,您将看到相同的结果

代码语言:javascript
复制
SELECT continent, name, area FROM world x
  WHERE x.area >= ALL
    (SELECT y.area FROM world y
    WHERE y.continent=x.continent and area>0)
票数 4
EN

Stack Overflow用户

发布于 2015-02-27 06:59:00

一个重要的区别是

代码语言:javascript
复制
x = (select max(y) ...)

只有当x完全等于最大y时才是真,因此必须在y中找到x,但是

代码语言:javascript
复制
x >= all (select y ...)

如果x的值大于(或等于) y的所有值,则为真,因此x可能不在y中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28758403

复制
相关文章

相似问题

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