Обновление выписок с несколькими таблицами - PullRequest
1 голос
/ 06 марта 2020

Извиняюсь за то, что я довольно новичок в SQL, но мне интересно, возможно ли объединить две таблицы в операторе Update, при этом источник столбца будет фактически обновлен из третьей таблицы , Например, допустим, у меня есть простая таблица «emp» ( emp_unid , first_name, last_name, mgr_unid), таблица «dept» ( dept_unid , dept_name) и третья » ссылка "таблица ( link_id , emp_unid, dept_unid).

Компания решает перевести всех сотрудников с фамилией" Фергюсон "или" Мэлоун "из отдела экспорта в отдел импорта, поэтому нам нужно обновить соответствующие записи в таблице «link», используя emp_unids из «emp» и используя соответствующий dept_unid из «dept».

Теоретически, я бы хотел написать оператор обновления что-то вроде ниже:

UPDATE link l, emp e
    SET l.dept_unid = (SELECT dept_unid FROM dept 
                       WHERE dept_name = 'IMPORTS')
    WHERE l.emp_unid = e.emp_unid
    AND e.last_name IN ('FERGUSON', 'MALONE')

Я попытался перевернуть предложение WHERE до предложения SET, я попытался использовать явное объединение, я попытался написать это полностью без псевдонимов, но я не могу ' я не могу это сделать - я продолжаю получать "ORA-00971: отсутствует ключевое слово SET". Из того, что я прочитал / экспериментировал, Oracle не похоже на обновление нескольких таблиц в одном операторе, но на самом деле я просто пытаюсь обновить одну таблицу, ссылаясь на две другие таблицы.

Я упускаю что-то простое или есть более умный способ выполнить sh это?

1 Ответ

0 голосов
/ 06 марта 2020

Попробуйте это:

UPDATE link l
SET l.dept_unid = (SELECT dept_unid FROM dept 
                   WHERE dept_name = 'IMPORTS')
WHERE l.emp_unid = (select e.emp_unid
                    from emp e
                    where e.last_name IN ('FERGUSON', 'MALONE'))
...