Tujuan kueri saya adalah mengembalikan nama negara dan kepala negaranya jika kepala negara tersebut memiliki nama yang dimulai dengan A, dan ibu kota negara tersebut memiliki lebih dari 100.000 orang menggunakan kueri bersarang.
Berikut adalah kueri saya:
SELECT country.name as country,
(SELECT country.headofstate
from country
where country.headofstate like 'A%')
from country, city
where city.population > 100000;
Saya sudah mencoba membalikkannya, menempatkannya di klausa where, dll. Saya tidak mendapatkan kueri bersarang. Saya hanya mendapatkan kesalahan kembali, seperti "subquery mengembalikan lebih dari satu baris &" dan semacamnya. Jika seseorang dapat membantu saya bagaimana cara mengurutkannya, dan menjelaskan mengapa harus dengan cara tertentu, itu akan sangat bagus.
Jika harus "bersarang &", ini akan menjadi salah satu cara, untuk menyelesaikan pekerjaan Anda:
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
Sebuah JOIN
akan lebih efisien daripada subkueri yang berkorelasi. Mungkinkah, bahwa siapa yang pernah memberi Anda tugas itu tidak sesuai dengan kecepatannya sendiri?
Anda perlu bergabung
dengan dua tabel dan kemudian memfilter hasilnya dalam klausa 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%'
Cara saya melihatnya, satu-satunya tempat untuk kueri bersarang adalah di klausa WHERE, jadi misalnya
SELECT country.name, country.headofstate
FROM country
WHERE country.headofstate LIKE 'A%' AND
country.id in (SELECT country_id FROM city WHERE population > 100000)
Terlepas dari itu, saya harus setuju dengan Adrian: mengapa Anda harus menggunakan kueri bersarang?