为什么这个查询不适用于这种情况?

时间:2014-03-01 19:11:14

标签: mysql sql

我正在尝试解决此问题http://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial 在最后一项任务(编号8),我写了一个查询:

select name, continent from world a
where a.population > 
(select 3*max(population) from world b
where b.continent = a.continent)

但此查询不返回任何行。但工作几乎相同的查询(只是在子查询的末尾添加了一个额外的conditin)。但是怎么回事?即使国家名称相同,为什么不返回原始数据?

select name, continent from world a
where a.population > 
(select 3*max(population) from world b
where b.continent = a.continent and a.name <> b.name)

1 个答案:

答案 0 :(得分:0)

让我翻译两个查询对英语的影响,这样你就可以实现差异。

第一次查询; 比较并获取位于同一大洲且拥有该大洲人口最多国家/地区3倍以上的所有国家/地区。

第二次查询; 比较并获取同一大洲上所有国家/地区的所有国家/地区,除了他自己以外,该国家/地区的人口最多人数超过该大陆的3倍。

在您的第一个查询中,如果填充最大的国家/地区的人口最多,那么填充的最大国家/地区的填充次数不能超过自身的3倍,因此您的查询返回0结果。

但是在第二个查询中,人口最多的国家除了他自己的人口数量可能是同一大洲其他国家的3倍。