12

私のクエリの目標は、国の元首の名前が 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

4 に答える 4

16

それを「ネスト」する必要がある場合、これはあなたの仕事を成し遂げるための1つの方法です。

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

ただし、 AJOINは相関サブクエリよりも効率的です。それは、あなたにその仕事を与えた人が自分自身をスピードアップしていないということでしょうか?

于 2012-09-17T21:46:22.910 に答える
8

join2 つのテーブルに移動し、結果を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%'
于 2012-09-17T21:30:38.133 に答える
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)

それとは別に、私はエイドリアンに同意する必要があります:なぜネストされたクエリを使用する必要があるのですか?

于 2012-09-17T21:46:45.333 に答える
1

以下のクエリは、目的を達成するのに役立ちます。

select scountry, headofstate from data 
where data.scountry like 'a%'and ttlppl>=100000
于 2014-06-25T12:00:47.940 に答える