Использование коррелированной инструкции DELETE

Коррелированный подзапрос используется для удаления строк в таблице на основе строк из другой таблицы.

6-26-3902129

В случае инструкции 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

            HAVING COUNT(*) >= 4));

Используйте коррелированный подзапрос, чтобы удалить из таблицы EMPL6 только те строки, которые существуют также в таблице EMP_HISTORY.

6-27-6219089

Пример

В этом примере используются две таблицы:

  • таблица EMPL6, содержащая сведения обо всех текущих сотрудниках;

  • таблица EMP_HISTORY, содержащая сведения о бывших сотрудниках.

В таблице EMP_HISTORY содержатся данные о бывших сотрудниках, так что наличие записей одного и того же сотрудника в обеих таблицах EMPL6 и EMP_HISTORY будет считаться ошибкой. Такие ошибочные записи можно удалить, используя коррелированный подзапрос, показанный на рисунке.

Далее: Зачем обращаться к n-му подчиненному выражению?

Related Posts