Excluindo linhas das tabelas pai e filho
Suponha duas tabelas no Oracle 10G
TableA (Parent) --> TableB (Child)
Cada linha na Tabela A possui várias linhas filho relacionadas a ela na TabelaB.
Eu quero excluir linhas específicas na Tabela A, o que significa que eu tenho que excluir as linhas relacionadas na tabela B primeiro.
Isso exclui as entradas filho
delete from tableB where last_update_Dtm = sysdate-30;
Para excluir as linhas pai das linhas excluídas na tabela filho, eu poderia fazer algo assim
Delete from TableA where not exists (select 1 from tableB where tableA.key=tableB.key);
O exemplo acima também excluirá as linhas da tabela filha em que (last_update_Dtm = sysdate-30) é falso. A TabelaA não possui uma coluna last_update_dtm, portanto não há como saber quais linhas excluir sem as entradas na tabela filha.
Eu poderia salvar as chaves na tabela filho antes da exclusão, mas isso parece uma abordagem cara. Qual é a maneira correta de excluir as linhas nas duas tabelas?
EditarPara explicar melhor o que estou tentando obter, a consulta a seguir teria feito o que estou tentando fazer se não houvesse restrição entre as duas tabelas.
Delete from tableA
Where exists (
Select 1 from tableB
where tableA.key=tableB.key
and tableB.last_update_dtm=sysdate-30)
Delete from tableB where last_update_dtm=systdate-30