我正在尝试解决此问题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)
答案 0 :(得分:0)
让我翻译两个查询对英语的影响,这样你就可以实现差异。
第一次查询; 比较并获取位于同一大洲且拥有该大洲人口最多国家/地区3倍以上的所有国家/地区。
第二次查询; 比较并获取同一大洲上所有国家/地区的所有国家/地区,除了他自己以外,该国家/地区的人口最多人数超过该大陆的3倍。
在您的第一个查询中,如果填充最大的国家/地区的人口最多,那么填充的最大国家/地区的填充次数不能超过自身的3倍,因此您的查询返回0结果。
但是在第二个查询中,人口最多的国家除了他自己的人口数量可能是同一大洲其他国家的3倍。