我无法解决与子查询有关的问题

时间:2019-07-09 15:29:13

标签: sql subquery

因此,这是任务:查找所有国家人口均≤25000000的大洲。然后查找与这些大洲相关的国家/地区的名称。显示名称,大洲和人口。

我的看法:

select continent, name, population
from world x
where name = all(select name from world y
where y.continent=x.continent
and population<2500000 and population>0)

这并没有给我带来理想的结果,只给了我两个来自欧亚大陆的国家。

3 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用NOT EXISTS

select name, continent, population 
from world t
where not exists (
   select 1 from world 
   where continent = t.continent and population > 25000000
);

或与IN运算符一起使用的子查询:

select name, continent, population 
from world
where continent in (
   select continent from world
   group by continent 
   having max(population) <= 25000000
);

答案 1 :(得分:0)

使用子查询是否有要求?您的查询基本上等同于-

SELECT continent, name, population
FROM world x
WHERE population > 0 
AND population < 2500000

答案 2 :(得分:0)

为什么不使用联接来合并两个表-而不是子查询?那可能也有帮助吗?另外,相对于其他表“ y”,我不太了解“世界x”,因此您可能需要稍微调整一下我的查询。希望这会有所帮助!

SELECT continent, name, population
from world x
JOIN y on y.continent = x.continent
WHERE population < 2500000 and population > 0;