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.
No caso acima nós deletamos linhas coincidente apenas na tabela t1 e t2.
O
Osmar_Junior
Cara você tem que fazer dois DELETEs, primeiramente um para a tabela item_nota e depois outro para a tabela nota.
N
nathanRayden
Bom dia Cristiano,
tentei isso:
mas dá erro nessa virgula q separa as tabelas na 1º linha…
tah certo esse select?
S
SalomaoNeto
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.
N
nathanRayden
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 ?
G
GodZilla_XF
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
N
nathanRayden
Obrigado a todos!
Salomão e GodZilla_XF , deu certo a constraint!
Obrigado!
N
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?
F
FabricioPJ
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.
S
SalomaoNeto
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?
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…
G
GodZilla_XF
SalomaoNeto:
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?
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…
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.
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!