我正在尝试通过此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)
但是此查询不返回任何行。但是可以使用几乎相同的查询(只是在子查询的末尾添加了附加条件)。怎么了为什么即使国家名称相同,它也不会返回原始值?
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)
最佳答案
让我将两个查询的作用都翻译成英文,以便您能体会到区别。
第一个查询;比较并得出同一大陆上人口最多的那个国家的3倍以上的所有国家/地区。
第二个查询;比较并得出所有位于同一大洲的国家/地区,除他本人以外,其他国家/地区的人口最多是该大洲的3倍。
在第一个查询中,如果他是本国人口最多的国家,则本国人口最多的国家不能超过本人的3倍,因此您的查询返回0个结果。
但是在第二个查询中,人口最多的国家(本人除外)自己的人口可能是同一大洲其他国家的3倍。
关于mysql - 为什么此查询不适用于这种情况?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22119029/