Коррелированный подзапрос используется для удаления строк в таблице на основе строк из другой таблицы.
В случае инструкции DELETE
можно использовать коррелированный подзапрос, чтобы удалить только те строки, которые существуют также в другой таблице. Если принято решение хранить записи только о последних 4 должностях в таблице JOB_HISTORY
, то при смене пятой должности нужно удалить первую строку для сотрудника в этой таблице, используя поиск по параметру MIN(START_DATE). Следующий пример кода показывает, как предыдущая операция может быть проведена с помощью коррелированной инструкции DELETE:
DELETE FROM emp_history JH WHERE employee_id = (SELECT employee_id FROM employees E WHERE JH.employee_id = E.employee_id AND START_DATE = (SELECT MIN(start_date) FROM job_history JH WHERE JH.employee_id = E.employee_id) AND 5 > (SELECT COUNT(*) FROM job_history JH WHERE JH.employee_id = E.employee_id GROUP BY EMPLOYEE_ID
|
Используйте коррелированный подзапрос, чтобы удалить из таблицы EMPL6
только те строки, которые существуют также в таблице EMP_HISTORY
.
Пример
В этом примере используются две таблицы:
-
таблица
EMPL6
, содержащая сведения обо всех текущих сотрудниках; -
таблица
EMP_HISTORY
, содержащая сведения о бывших сотрудниках.
В таблице EMP_HISTORY
содержатся данные о бывших сотрудниках, так что наличие записей одного и того же сотрудника в обеих таблицах EMPL6
и EMP_HISTORY
будет считаться ошибкой. Такие ошибочные записи можно удалить, используя коррелированный подзапрос, показанный на рисунке.
Далее: Зачем обращаться к n-му подчиненному выражению?