2012-09-17 5 views
8

私のクエリの目的は、headofstateの名前がAで始まり、国の首都にネストされたクエリを利用する人数が100,000を超える場合、国名とその先頭を返すことです。私はネストされたクエリを取得しないwhere句などに置く、それを逆に試してみたクエリをSQLでネストする

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

は、ここに私のクエリです。私は "サブクエリが複数の行を返す"のようなエラーを返すだけです。誰かが私にそれを注文する方法を手伝って、なぜそれがある特定の方法である必要があるのか​​を説明すれば、それはすばらしいでしょう。

答えて

15

それは「入れ子に」しなければならない場合、これはあなたの仕事を得るために、一つの方法になります:

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は、相関サブクエリよりも効率的です。あなたがこれまでにあなたに与えたことは自分自身のスピードを上げることではないのですか?

+0

この種類のSQLクエリを使用すると、以下のようなエラーが表示されます。オペランドは、あなたが私を助けることができる1列(複数可)を含める必要があります....私のSQLクエリはSELECT sです。* j5749_faculty_subjects FROM s.subjectid = '1' AND( \t \tがSELECT WHERE をSなど。* \tを私のクエリで最後の部分を参照してください:: '> 100000' \t \t a.facultyid = s.facultyid AND a.timeid = '3' ) – Amit

+0

@amitとしてj5749_facultyavailablity FROM \t。同等品がありません。あなたはおそらく 'EXISTS'を望みます。 [この例を参照してください](http://stackoverflow.com/questions/14251180/find-records-where-join-doesnt-exist/14260510#14260510)その他、すべての詳細を*新しい質問*を開始してください。 –

7

あなたは2つのテーブルを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%' 
+0

もう一度お返事ありがとうございます!これは完全に機能していても意味がありますが、ネストされたクエリを使用することになっています。代わりがありますか? – ZAX

+1

@ZAXネストされたクエリが必要な場合は、私の答えを見てください。:-) – aleroot

+2

@ ZAXなぜか、地球上では、ネストされたクエリを使用することになっていますか?この宿題ですか?ネストされたクエリはこの問題の最善の解決策ではないので、 –

0

私はそれを見る方法は、入れ子になったクエリのための唯一の場所は、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) 

これ以外にも、私はアドリアンに同意する必要があります:なぜあなたはネストされたクエリを使うべきですか?

1

以下の質問は、あなたが望むものを達成するのに役立ちます。

select scountry, headofstate from data 
where data.scountry like 'a%'and ttlppl>=100000 
関連する問題