Delete em 2 tabelas no postgres [resolvido]

saudações pessoal!

Estou tentando fazer uma exclusão que envolve 2 tabelas, no caso é uma tabela de vendas, onde tenho a tabela NOTA e ITEM_NOTA…
segue o que eu tentei fazer…

DELETE FROM item_nota
  WHERE item_nota.numero_nota IN (SELECT nota.numero_nota FROM nota WHERE nota.numero_nota = 7 )

//ou 

delete from item_nota USING nota
WHERE item_nota.numero_nota = nota.numero_nota and nota.numero_nota = 8 

Só que no exemplo, ele exclui só da tabela item_nota, e não exclui da tabela nota. Como é um cancelamento de venda, tem que excluir das 2 ao mesmo tempo.

Se alguem puder ajudar, por favor, ficarei grato…

Bom dia,

Use isso,

DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id
ou
DELETE FROM t1,t2 USING t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id

No caso acima nós deletamos linhas coincidente apenas na tabela t1 e t2.

Cara você tem que fazer dois DELETEs, primeiramente um para a tabela item_nota e depois outro para a tabela nota.

Bom dia Cristiano,
tentei isso:

mas dá erro nessa virgula q separa as tabelas na 1º linha…
tah certo esse select?

No caso a tabela ITEM_NOTA deve ter uma chave estrangeira vindo da tabela NOTA, então porque você não adiciona “ON DELETE CASCADE” nessa chave, assim basta você excluir a NOTA que o próprio banco de dados excluirá todos os ITEM_NOTA relacionados a ela.

Sim salomão, na tabela nota, tem a coluna numero_nota, que tem na tabela item_nota como chave estrangeira…
Mas como faço esse delete em sql que vc falou ?

Olá, usando a idéia do amigo SalomaoNeto, vc pode fazer o seguinte:

Recriar a constraint que faz referencia a tabela mãe e adicionar o comando

ON DELETE CASCADE

no lugar de

ON DELETE NO ACTION

Obrigado a todos!
Salomão e GodZilla_XF , deu certo a constraint!
Obrigado!

Pessoal, tem um problema com o cascade…
ao excluir a nota, ele exclui o produto tb, pois na tabela item_nota tem o codigo do produto…
como resolver isso?

Tente usar uma trigger. Ao excluír da tabela A, a trigger é acionada e exclui da tabela B. Como a trigger faz parte da transação, se a exclusão da tabela B falhar por algum motivo, ocorre o rollback na exclusão da tabela A.

[quote=nathanRayden]Pessoal, tem um problema com o cascade…
ao excluir a nota, ele exclui o produto tb, pois na tabela item_nota tem o codigo do produto…
como resolver isso?[/quote]
Sugiro revisar sua modelagem, pois isso não era pra acontecer já que você alterou somente a constraint da chave estrangeira entre as tabelas NOTA e ITEM_NOTA…

[quote=SalomaoNeto][quote=nathanRayden]Pessoal, tem um problema com o cascade…
ao excluir a nota, ele exclui o produto tb, pois na tabela item_nota tem o codigo do produto…
como resolver isso?[/quote]
Sugiro revisar sua modelagem, pois isso não era pra acontecer já que você alterou somente a constraint da chave estrangeira entre as tabelas NOTA e ITEM_NOTA…

[/quote]

Olá, concordo com o amigo SalomaoNeto, nesta caso você poderia dar uma olhada se você não fez uma constraint de itens da noa com produtos do seu banco com a flag

ON DELETE CASCADE

pois somente isso no meu ver poderia apagar os produtos do cadastro, pelomenos é o que eu pude pensar no momento, mas vale a pena dar uma olhada nas constraints de produtos e itens_nota.

Att,
André Dalcin
Planos Assessoria

Desculpe a demora para responder, mas a resolução era esta mesma demonstrada por vcs, e o fato de estar excluindo o produto tambem, era pq na minha classe produto estava relacionada com cascade tb com a classe item_nota, aí foi só retirar…
Obrigado a todos!