Usuário com melhor resposta
DELETE SQL

Pergunta
-
Olá,
eu tenho 3 tabelas: grupo, categoria e subcategoria.
depois eu tenho a tabela cliente e subcat_cliente
Um cliente pode ter um grupo, varias categorias e varias subcategorias.
Eu insiro as subcategorias selecionadas para o cliente na tabela subcat_cliente.
pronto, até ai tudo ok.
Mas eu preciso excluir esses dados...
Por ex.: eu listo o grupo, categorias e subcategorias do cliente desejado e é preciso ter a opção de excluir esse grupo, categoria e subcategoria,
onde quando eu excluo o grupo do cliente, tem que excluir somente as subcategorias relacionadas a esse grupo na tabela subcat_cliente,
o mesmo com as categorias...
Esse é o problema, como que fica a query para excluir os dados da tabela subcat_cliente?
Obrigado.
Respostas
-
Murilo, basta fazer um Join entre as tabelas. Você pode criar um trigger na tabela de Grupos, se quiser.
Do contrário, se for implementar simplesmente a instrução para deletar a SubCategoria_Cliente, o código seria:
Declare @Grupo Table (CodGrupo int, Descricao VarChar(50))
Declare @Categoria Table (CodCategoria int, Descricao VarChar(50), CodGrupo int)
Declare @SubCategoria Table (CodSubCategoria int, Descricao VarChar(50), CodCategoria int)
Declare @SubCat_Cliente Table (CodSubCat_Cliente int, CodSubCategoria int)
Delete
SCC
From
@SubCat_Cliente SCC Join @SubCategoria SC on (SCC.CodSubCategoria = SC.CodSubCategoria)
Join @Categoria C on (SC.CodCategoria = C.CodCategoria)
Where
(C.CodGrupo = '12345')
Roberson Ferreira - Database DeveloperSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Marcado como Resposta Murilo Bom sexta-feira, 17 de junho de 2011 18:36
-
Se for criar uma Trigger, o código dela seria praticamente o mesmo, bastando retirar o Where e fazer um Join com as informações que foram excluídas da tabela Grupo, através da tabela Deleted.
Create Trigger NomeTrigger on TabelaGrupo After Delete as
Begin
Delete
SCC
From
@SubCat_Cliente SCC Join @SubCategoria SC on (SCC.CodSubCategoria = SC.CodSubCategoria)
Join @Categoria C on (SC.CodCategoria = C.CodCategoria)
Join Deleted D on (C.CodGrupo = D.CodGrupo)
End
Roberson Ferreira - Database DeveloperSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Marcado como Resposta Murilo Bom sexta-feira, 17 de junho de 2011 18:36
Todas as Respostas
-
Murilo, basta fazer um Join entre as tabelas. Você pode criar um trigger na tabela de Grupos, se quiser.
Do contrário, se for implementar simplesmente a instrução para deletar a SubCategoria_Cliente, o código seria:
Declare @Grupo Table (CodGrupo int, Descricao VarChar(50))
Declare @Categoria Table (CodCategoria int, Descricao VarChar(50), CodGrupo int)
Declare @SubCategoria Table (CodSubCategoria int, Descricao VarChar(50), CodCategoria int)
Declare @SubCat_Cliente Table (CodSubCat_Cliente int, CodSubCategoria int)
Delete
SCC
From
@SubCat_Cliente SCC Join @SubCategoria SC on (SCC.CodSubCategoria = SC.CodSubCategoria)
Join @Categoria C on (SC.CodCategoria = C.CodCategoria)
Where
(C.CodGrupo = '12345')
Roberson Ferreira - Database DeveloperSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Marcado como Resposta Murilo Bom sexta-feira, 17 de junho de 2011 18:36
-
Se for criar uma Trigger, o código dela seria praticamente o mesmo, bastando retirar o Where e fazer um Join com as informações que foram excluídas da tabela Grupo, através da tabela Deleted.
Create Trigger NomeTrigger on TabelaGrupo After Delete as
Begin
Delete
SCC
From
@SubCat_Cliente SCC Join @SubCategoria SC on (SCC.CodSubCategoria = SC.CodSubCategoria)
Join @Categoria C on (SC.CodCategoria = C.CodCategoria)
Join Deleted D on (C.CodGrupo = D.CodGrupo)
End
Roberson Ferreira - Database DeveloperSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Marcado como Resposta Murilo Bom sexta-feira, 17 de junho de 2011 18:36