none
JOIN 3 Tabelas tendo como tabela Base somente uma RRS feed

  • Pergunta

  • Olá Blogueiros da MS,

    Quero aperfeiçoar uma Query que fiz, mas está complicado, quem puder me ajudar agradeço.

    É o Seguinte:

    Tenho 3 tabelas: Tb1, Tb2 e Tb3

    A Tb2 e Tb3 tem relação com a Tb1, porém a Tb2 e Tb3 não tem entre elas.

    Preciso pegar os registros a partir da Tb1 e que tenham registro tanto na Tb2 e Tb3. Consegui resolver o problema fazendo SubQuery's, mas gostaria de saber se tem um jeito de fazer em apenas uma query, levando em consideração a performance de execução, pois sei que com SubQuery's perdemos um pouco.

    SQL com SubQuery:

    --Tb2 com a Tb1
    SELECT Tb2.[Chave Estrangeira], Tb2.[Quantidade Baixado]
    FROM Tb2 INNER JOIN Tb1 ON Tb2.[Chave Estrangeira] = Tb1.[Chave Primária]
    UNION ALL
    --Tb3 com a Tb1
    SELECT Tb3.[Chave Estrangeira], Tb2.[Quantidade Baixado]
    FROM Tb3 INNER JOIN Tb1 ON Tb3.[Chave Estrangeira] = Tb1.[Chave Primária]

    Tentativa fazendo com apenas uma Query:

    Obs.: Está ocorrendo duplicidades

    SELECT Tb1.[Chave Primária], Tb2.[Quantidade Baixado] + Tb3.[Quantidade Baixado]
    FROM Tb1 INNER JOIN Tb2 ON Tb1.[Chave Primária] = Tb2.[Chave Estrangeira]
             INNER JOIN Tb3 ON T1.[Chave Primária] = Tb3.[Chave Estrangeira]




    Armando Correa H Neto

    quinta-feira, 21 de fevereiro de 2013 16:17

Todas as Respostas

  • Armando, experimentou utilizar o DISTINCT?

    SELECT DISTINCT Tb1.[Chave Primária], Tb2.[Quantidade Baixado] + Tb3.[Quantidade Baixado]
     FROM Tb1 INNER JOIN Tb2 ON Tb1.[Chave Primária] = Tb2.[Chave Estrangeira]
              INNER JOIN Tb3 ON T1.[Chave Primária] = Tb3.[Chave Estrangeira] 

    Abçs
    quinta-feira, 21 de fevereiro de 2013 16:30
  • Se o DISTINCT não der certo, tente agrupar...

    SELECT Tb1.[Chave Primária], SUM(Tb2.[Quantidade Baixado] + Tb3.[Quantidade Baixado])
     FROM Tb1 INNER JOIN Tb2 ON Tb1.[Chave Primária] = Tb2.[Chave Estrangeira]
              INNER JOIN Tb3 ON T1.[Chave Primária] = Tb3.[Chave Estrangeira]
    GROUP BY Tb1.[Chave Primária]

    Abçs
    quinta-feira, 21 de fevereiro de 2013 16:42
  • Tentei aqui, mas não deu certo continua em duplicidade

    Vou analisar os dados que ela está trazendo para verificar o motivo da duplicidade

    e depois te pergunto se é possível removê-las a partir dessa mesma Query

    Deste já Agradeço


    Armando Correa H Neto

    quinta-feira, 21 de fevereiro de 2013 20:13
  • Armando,

    Cara a alguns tive passei por uma situação parecida com a sua, e o problema estava justamente nos meus dados armazenados em algumas tabelas que estavam forçando a duplicidade devido ao erro no relacionamento e definição das chaves primárias no projeto que estavamos trabalhando.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sábado, 23 de fevereiro de 2013 12:48
  • Junior Galvão,

    Vou analisar as chaves e os relacionamentos.

    Depois eu posto a estrutura

    Abraços


    Armando Correa H Neto

    domingo, 24 de fevereiro de 2013 05:53