Как обновить значения полученные из одной таблицы в двух других таблицах?
Есть таблицы A, B и C. Нужно выбрать определенные значения из всех строк таблицы A, а затем для каждой строки таблицы A обновить значения в таблицах B и C.
Псевдокод того, что примерно хочу сделать:
SELECT A1, A2, A3, A4 FROM Table A
UPDATE Table B SET B2=A2, B3=A3, B4=A4 WHERE B1 = A1
UPDATE Table C SET C2=A2, C3=A3, C4=A4 WHERE C1 = A1;
Как можно этого достичь?
Свободный перевод вопроса SQL Update values from one table in another от участника @user1107888
Ответы (1 шт):
В одном запросе нельзя обновить две таблицы, потребуются два запроса на обновление.
Можно воспользоватся инлайн представлением:
update (
select a.a2, a.a3, a.a4 , b.b2, b.b3, b.b4
from a
inner join b on b.b1 = a.a1
) u
set u.b2 = u.a2, u.b3 = u.a3, u.b4 = u.a4;
Плюсом такого подхода является то, что обновляется только совпадающие строки, в то время как, с классическим коррелированным подзапросом, необходимо повторить его в WHERE.
Еще один лаконичный синтаксис, которым можно достичь желаемого - MERGE:
merge into b
using a on (a.a1 = b.a1)
when matched then
update set b.b2 = a.a2, b.b3 = a.a3, b.b4 = a.a4;