none
DELETE SQL RRS feed

  • 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.

    sexta-feira, 17 de junho de 2011 14:57

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 Developer

    Se 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
    sexta-feira, 17 de junho de 2011 15: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 Developer

    Se 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
    sexta-feira, 17 de junho de 2011 15:39

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 Developer

    Se 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
    sexta-feira, 17 de junho de 2011 15: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 Developer

    Se 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
    sexta-feira, 17 de junho de 2011 15:39