Как использовать вывод одного оператора SQL в другом - PullRequest
3 голосов
/ 01 сентября 2011

У меня есть следующее утверждение:

select region_id from regions
where region_name = 'Europe' 

Мне нужен выход из этого выражения в следующем выражении, где 'bla':

select count(*) from countries
where region_id = 'bla'

Как я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 01 сентября 2011

Попробуйте предложение IN

select distinct * from countries
where region_id IN (select region_id from regions
where region_name = 'Europe')
2 голосов
/ 01 сентября 2011

Использование EXISTS:

SELECT c.* 
  FROM COUNTRIES c
 WHERE EXISTS (SELECT NULL 
                 FROM REGIONS r
                WHERE r.region_id = c.region_id
                  AND r.region_name = 'Europe')

Я предпочитаю использовать EXISTS, а не IN, потому что:

  • IN в Oracle имеет ограничение в 1000 значений
  • EXISTS позволяет вам сопоставить несколько столбцов, если это необходимо
  • EXISTS возвращает true при первом совпадении, что может быть быстрее, чем IN / etc, в зависимости от потребностей

Большая ошибка EXISTS как коррелированный подзапрос, но он выполняется по-другому и не оценивает предложение SELECT - вы можете проверить, используя:

SELECT c.* 
  FROM COUNTRIES c
 WHERE EXISTS (SELECT 1/0
                 FROM REGIONS r
                WHERE r.region_id = c.region_id
                  AND r.region_name = 'Europe')
2 голосов
/ 01 сентября 2011

Подзапросы на помощь!

select distinct * 
from countries
where region_id=(select top 1 ir.region_id 
                 from regions ir
                 where ir.region_name = 'Europe' )

В качестве альтернативы, вы можете использовать in и указать список элементов, возвращаемых по вашему запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...