Arquivos de sites

SQL – UPDATE a partir de um SELECT

E ai galera, beleza?

Hoje vamos aprender como efetuar UPDATE em registros obtidos a partir de um SELECT, temos duas formas e fazê-lo, para exemplificar vamos considerar o seguinte SELECT:

SELECT A.*
FROM TAB_A A JOIN TAB_B B ON (A.ID = B.ID)
WHERE <CONDIÇÕES...>

Opção 1 – Utilizar o SELECT desejado no lugar da tabela a ser alterada, no SET utilize as colunas da TAB_A que serão atualizadas:

UPDATE (
SELECT A.*
FROM TAB_A A JOIN TAB_B B ON (A.ID = B.ID)
WHERE <CONDIÇÕES...>
) SET <COL1 TAB_A> = <VAL1>, <COL2 TAB_A> = <VAL2>

A abordagem acima em algumas modelagem podem acarretar no erro ORA-01779: cannot modify a column which maps to a non key-preserved table, quando isso acontecer utilize a opção 2, abaixo.

Opção 2 – Utilizar a clausula EXISTS no WHERE do UPDATE tradicional:

UPDATE TAB_A TA
SET <COL1 TAB_A> = <VAL1>, <COL2 TAB_A> = <VAL2>
WHERE EXISTS (
SELECT A.*
FROM TAB_A A JOIN TAB_B B ON (A.ID = B.ID)
WHERE <CONDIÇÕES...>
AND A.ID = TA.ID
)

Espero que tenha ajudado! Qualquer dúvida, poste aqui nos comentários que eu responderei o mais breve possível 😉

See ya!