none
Junção entre Tabelas RRS feed

  • Pergunta

  • Olá,

    Estou com a seguinte dúvida/problema:

    Tenho um tabela de produtos, onde classifico estes produtos por grupo e sub grupo.

    Estou tentando realizar uma consulta onde me retorne os produtos e seus respectivos grupos e subgrupos com código e descrição.

    Quando realizo uma consulta buscando somente o código do grupo e subgrupo, ou o codigo e descrição somente do grupo, retorna corretamente, mas quando chamo a descrição do sub ele traz todos os valores. pois o subgrupo depende diretamente do grupo relacionado.

    ou seja terei varios subgrupos com o mesmo código, porem na tabela ele está ligado diretamente ao grupo, ex:

    Tabela Grupo
    CodGru Descricao Grupo
    1 Farinha
    2 Achocolatado
    3 Leite
    4 Açucar

    Tabela SubGrupo
    CodGru CodSub Descricao Sub
    1 1 Mandioca
    1 2 Temperada
    1 3 de Milho
    2 1 Em po
    2 2 Liquido
    3 1 Em po
    3 2 Longa Vida
    4 1 Cristal
    4 2 Refinado

    Tabela Produtos
    CodProd Descriçao Produto CodGrupo CodSubGrupo
    1 Farinha de Mandioca 1 1
    2 Farinha de Milho 1 3
    3 Achocolatado 2 1

    O que quero na consulta é mais ou menos isso

    CodProd Descriçao Produto CodGrupo DescGrupo CodSubGrp DescSubGrp
    1 Farinha de Mandioca 1 farinha 1 Mandioca
    2 Farinha de Milho 1 farinha 3 de milho
    3 Achocolatado 2 achocolatado 1 em po

    Como ja citado, quero trazer a descrição do subgrupo referente ao grupo deste produto

    Se alguem puder dar uma luz

    Abs

    terça-feira, 16 de outubro de 2012 13:19

Respostas

  • Na hora do join com a tabela de subgrupo filtre tanto pelo grupo como pelo subgrupo,

    Ficaria mais ou menos assim

    Select * from Produtos A 
    	inner join Grupo b 
    		on a.CodGrupo = b.CodGru
    	inner join SubGrupo C
    		on c.CodGru = b.CodGru
    		and c.CodSub = a.CodSubGrp


    [ ]´s,
    Lukas Baldan

    terça-feira, 16 de outubro de 2012 13:35
  • Exemplo completo:
    Declare @TabelaGrupo Table (CodGrupo int, DescricaoGrupo VarChar(30))
    Insert Into @TabelaGrupo Values
    (1, 'Farinha'),
    (2, 'Achocolatado'),
    (3, 'Leite'),
    (4, 'Açucar')
    
    Declare @TabelaSubGrupo Table (CodGrupo int, CodSub int, DescricaoSub VarChar(30))
    Insert Into @TabelaSubGrupo Values
    (1, 1, 'Mandioca'),
    (1, 2, 'Temperada'),
    (1, 3, 'de Milho'),
    (2, 1, 'Em po'),
    (2, 2, 'Liquido'),
    (3, 1, 'Em po'),
    (3, 2, 'Longa Vida'),
    (4, 1, 'Cristal'),
    (4, 2, 'Refinado')
    
    Declare @TabelaProdutos Table (CodProd int, DescricaoProduto VarChar(30), CodGrupo int, CodSubGrupo int)
    Insert Into @TabelaProdutos Values
    (1, 'Farinha de Mandioca', 1, 1),
    (2, 'Farinha de Milho'   , 1, 3),
    (3, 'Achocolatado'       , 2, 1)
    
    Select
      TP.CodGrupo,
      TP.DescricaoProduto,
      TP.CodGrupo,
      TG.DescricaoGrupo,
      TP.CodSubGrupo,
      TSG.DescricaoSub
    From
      @TabelaProdutos TP Left Join @TabelaGrupo TG on (TG.CodGrupo = TP.CodGrupo)
    	                 Left Join @TabelaSubGrupo TSG on (TSG.CodGrupo = TG.CodGrupo) and
                                                              (TSG.CodSub   = TP.CodSubGrupo)


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    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.

    terça-feira, 16 de outubro de 2012 13:47
    Moderador

Todas as Respostas

  • Bom dia,

    Você pode postar a query que você tentou executar?


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 16 de outubro de 2012 13:33
  • Na hora do join com a tabela de subgrupo filtre tanto pelo grupo como pelo subgrupo,

    Ficaria mais ou menos assim

    Select * from Produtos A 
    	inner join Grupo b 
    		on a.CodGrupo = b.CodGru
    	inner join SubGrupo C
    		on c.CodGru = b.CodGru
    		and c.CodSub = a.CodSubGrp


    [ ]´s,
    Lukas Baldan

    terça-feira, 16 de outubro de 2012 13:35
  • Exemplo completo:
    Declare @TabelaGrupo Table (CodGrupo int, DescricaoGrupo VarChar(30))
    Insert Into @TabelaGrupo Values
    (1, 'Farinha'),
    (2, 'Achocolatado'),
    (3, 'Leite'),
    (4, 'Açucar')
    
    Declare @TabelaSubGrupo Table (CodGrupo int, CodSub int, DescricaoSub VarChar(30))
    Insert Into @TabelaSubGrupo Values
    (1, 1, 'Mandioca'),
    (1, 2, 'Temperada'),
    (1, 3, 'de Milho'),
    (2, 1, 'Em po'),
    (2, 2, 'Liquido'),
    (3, 1, 'Em po'),
    (3, 2, 'Longa Vida'),
    (4, 1, 'Cristal'),
    (4, 2, 'Refinado')
    
    Declare @TabelaProdutos Table (CodProd int, DescricaoProduto VarChar(30), CodGrupo int, CodSubGrupo int)
    Insert Into @TabelaProdutos Values
    (1, 'Farinha de Mandioca', 1, 1),
    (2, 'Farinha de Milho'   , 1, 3),
    (3, 'Achocolatado'       , 2, 1)
    
    Select
      TP.CodGrupo,
      TP.DescricaoProduto,
      TP.CodGrupo,
      TG.DescricaoGrupo,
      TP.CodSubGrupo,
      TSG.DescricaoSub
    From
      @TabelaProdutos TP Left Join @TabelaGrupo TG on (TG.CodGrupo = TP.CodGrupo)
    	                 Left Join @TabelaSubGrupo TSG on (TSG.CodGrupo = TG.CodGrupo) and
                                                              (TSG.CodSub   = TP.CodSubGrupo)


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    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.

    terça-feira, 16 de outubro de 2012 13:47
    Moderador
  • Leandro, por favor, veja se a simulação acima representa exatamente a sua situação ou se tem algo a mais.

    Veja que com as informações que você passou montamos um cenário no qual conseguimos chegar ao resultado esperado, mencionado na abertura da Thread.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    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.

    terça-feira, 16 de outubro de 2012 13:58
    Moderador
  • Olá Lukas,

    Muito obrigado, era isso mesmo que queria...

    Aproveito para agradecer também ao Roberson, no post posterior, pois também me atendeu e tb funcionou.

    Abs,

    terça-feira, 16 de outubro de 2012 13:59
  • OK Leandro. Marque as respostas então para fecharmos a Thread. Abs.

    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    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.

    terça-feira, 16 de outubro de 2012 14:14
    Moderador