Использование 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')