SQLにおけるクエリのネスト

私のクエリの目的は、ネストされたクエリを利用して、Aで始まる名前を持つ国の首長と、その国の首都の人口が10万人以上である場合に、その国の名前と首長を返すことです。

以下は私のクエリです。

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

逆にしてみたり、Where句に置いてみたりしました。ネストされたクエリを取得できません。私は、"subquery returns more than one row"などのエラーが返ってくるだけなんです。もし誰かが、どのように順序付けるか、そしてなぜそれが特定の方法でなければならないかを説明して、私を助けてくれるなら、それは素晴らしいことです。

ソリューション

もし、入れ子にする必要があるなら、これは一つの方法でしょう。

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` は相関サブクエリよりも効率的でしょうけど。そのタスクをあなたに与えた人は、スピードについていけないのでしょうか?

解説 (3)

2つのテーブルを「結合」して、その結果を「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%'
解説 (5)

私が考えるに、ネストされたクエリの場所は 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と同意見です:なぜネストされたクエリを使用する必要があるのでしょうか?

解説 (0)

以下のクエリは、必要なものを達成するのに役立ちます。

select scountry, headofstate from data 
where data.scountry like 'a%'and ttlppl>=100000
解説 (0)