在SQL中嵌套查询

时间:2012-09-17 21:28:16

标签: sql nested

我的查询的目标是返回国家/地区名称及其国家元首,如果它的headofstate名称以A开头,并且该国家的首都使用嵌套查询的人数超过100,000人。

这是我的问题:

SELECT country.name as country, 
       (SELECT country.headofstate 
        from country 
        where country.headofstate like 'A%')      
from country, city 
where city.population > 100000;

我尝试将其反转,将其放在where子句等中。我没有得到嵌套查询。我只是得到错误,比如“子查询返回多行”等等。如果有人可以帮助我如何订购它,并解释为什么它需要以某种方式,这将是伟大的。

4 个答案:

答案 0 :(得分:17)

如果必须“嵌套”,这将是完成工作的一种方式:

SELECT o.name AS country, o.headofstate 
FROM   country o
WHERE  o.headofstate like 'A%'
AND   (
    SELECT i.population
    FROM   city i
    WHERE  i.id = o.capital
    ) > 100000

但是JOIN比相关子查询更有效。可能是,那个曾经给你这项任务的人不能自己加速吗?

答案 1 :(得分:8)

您需要join这两个表,然后在where子句中过滤结果:

SELECT country.name as country, country.headofstate 
from country
inner join city on city.id = country.capital
where city.population > 100000
and country.headofstate like 'A%'

答案 2 :(得分:2)

我看到它的方式,嵌套查询的唯一位置是在WHERE子句中,例如。

SELECT country.name, country.headofstate
FROM country 
WHERE country.headofstate LIKE 'A%' AND 
country.id in (SELECT country_id FROM city WHERE population > 100000)

除此之外,我必须同意Adrian:为什么你应该使用嵌套查询?

答案 3 :(得分:1)

以下查询可帮助您实现所需目标。

select scountry, headofstate from data 
where data.scountry like 'a%'and ttlppl>=100000