两者有什么区别?
报表1:
SELECT continent, name, area FROM world x
WHERE x.area >= ALL
(SELECT y.area FROM world y
WHERE y.continent=x.continent)报表2:
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的第二条语句返回第一条语句的超集。(与第一条语句相比,结果更多),我不知道为什么会这样。
发布于 2015-02-27 07:03:52
这个特定数据集的问题是,像“非洲”和“欧洲”这样的一些大陆的区域数据为零(例如,欧洲的荷兰)。
将area>0添加到第一个查询中,您将看到相同的结果
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)发布于 2015-02-27 06:59:00
一个重要的区别是
x = (select max(y) ...)只有当x完全等于最大y时才是真,因此必须在y中找到x,但是
x >= all (select y ...)如果x的值大于(或等于) y的所有值,则为真,因此x可能不在y中。
https://stackoverflow.com/questions/28758403
复制相似问题