Цель моего запроса - вернуть название страны и ее главу государства, если ее глава имеет имя, начинающееся на 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 и т.д. Я не получаю вложенных запросов. Я просто получаю ошибки, типа "подзапрос возвращает более одной строки" и тому подобное. Если кто-то может помочь мне с тем, как это упорядочить, и объяснить, почему это должно быть определенным образом, было бы здорово.
Если необходимо "вложить", то это один из способов сделать свою работу:
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
был бы более эффективен, чем коррелированный подзапрос. Может ли быть так, что тот, кто дал вам это задание, сам не в курсе дела?
Вам нужно объединить
две таблицы и затем отфильтровать результат в предложении 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%'
Как я понимаю, единственное место для вложенного запроса - это предложение 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)
Кроме того, я вынужден согласиться с Адрианом: какого черта вы должны использовать вложенные запросы?