Category Archives: SQL
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!
JPQL – Como criar query de DELETE com JOIN
E ai galera beleza?
Estou em um novo projeto muito legal, e me deparei com um problema, eu precisava fazer uma query para deletar uns dados no banco, só que pra selecionar exatamente oque eu precisava excluir era necessário utilizar joins, porém ao montar uma query parecida com essa:
delete from Queue q
where q.enabledMember = :enabledMember
and q.letter.eventReason.event.type = :eventType
and q.letter.eventReason.reason = :reason
Tomei o seguinte erro:
The entity abstract schema type declaration is malformed
Pesquisei um pouco na net e achei a seguinte solução, deletar a partir de um subselect, a query ficou assim:
delete from Queue q
where q in (select sq from Queue sq
where sq.enabledMember = :enabledMember
and sq.letter.eventReason.event.type = :eventType
and sq.letter.eventReason.reason = :reason )
Bom, é isso ai galera, espero que tenha ajudado 😀
Abraços!
Fonte: Jake Trent – JakeTrent.com