[SQL SERVER] LEFT JOIN repetindo resultados
Olá a todos.
Procurei inúmeras vezes uma solução para este problema, mas não encontrei especificamente uma solução.
Tenho uma consulta que busca valores em 3 tabelas diferentes, quando ela encontra duas linhas em uma das tabelas, as outras tabelas tem seus valores duplicados. Por exemplo.
Já tentei substituir o LEFT JOIN por um SUB SELECT (SELECT SUM(A.campo1) FROM tabela 1 AS B WHERE B.identificador = A.identificador), o que soluciona em partes meu problema, mas depois eu não consigo fazer GROUP BY.
Eu precisava relacionar estas tabelas de forma que eu pudesse fazer agrupamentos, de qual forma seria mais eficiente?
Obrigado a todos.
Procurei inúmeras vezes uma solução para este problema, mas não encontrei especificamente uma solução.
Tenho uma consulta que busca valores em 3 tabelas diferentes, quando ela encontra duas linhas em uma das tabelas, as outras tabelas tem seus valores duplicados. Por exemplo.
SELECT A.identificador, SUM(B.campo1) + SUM(C.campo2) + SUM(D.campo3) FROM tabela_principal as A LEFT JOIN tabela1 AS B ON B.identificador = A.identificador LEFT JOIN tabela2 AS C ON D.identificador = A.identificador LEFT JOIN tabela3 AS D ON C.identificador = A.identificador
Já tentei substituir o LEFT JOIN por um SUB SELECT (SELECT SUM(A.campo1) FROM tabela 1 AS B WHERE B.identificador = A.identificador), o que soluciona em partes meu problema, mas depois eu não consigo fazer GROUP BY.
Eu precisava relacionar estas tabelas de forma que eu pudesse fazer agrupamentos, de qual forma seria mais eficiente?
Obrigado a todos.
Alan Luna
Curtidas 0
Melhor post
Fabio Parreira
11/05/2017
Tente isso!
SELECT IDENTIFICADOR, SUM(CAMPO1), SUM(CAMPO2), SUM(CAMPO3), FROM ( SELECT A.identificador AS IDENTIFICADOR, B.campo1 AS CAMPO1, C.campo2 AS CAMPO2, D.campo3 AS CAMPO3 FROM tabela_principal as A LEFT JOIN tabela1 AS B ON B.identificador = A.identificador LEFT JOIN tabela2 AS C ON D.identificador = A.identificador LEFT JOIN tabela3 AS D ON C.identificador = A.identificador ) AS CTE GROUP BY IDENTIFICADOR
GOSTEI 3
Mais Respostas
Emerson Nascimento
11/05/2017
se eu entendi a sua questão...
SELECT A.identificador, (select SUM(B.campo1) from tabela1 AS B ON B.identificador = A.identificador) campo1, (select SUM(C.campo2) from tabela2 AS C ON C.identificador = A.identificador) campo2, (select SUM(D.campo3) from tabela3 AS D ON D.identificador = A.identificador) campo3 FROM (select distinct identificador from tabela_principal) as A
GOSTEI 1
Alan Luna
11/05/2017
Olá a todos.
Peço desculpa pela demorar para retornar, tive alguns problemas de hardware.
Sobre minha questão, agradeço a todos, demorei um pouco pra entender as subquerys.
Pelo que entendi, minha solução seria criar uma primeira consulta para depois pesquisar sobre os resultados encontrados.
Ex.
Desta forma, primeiro ele obtém a primeira consulta e, logo em seguida, realiza uma consulta com os resultados da primeira.
Consegui resolver o meu problema. Muito obrigado a todos.
Peço desculpa pela demorar para retornar, tive alguns problemas de hardware.
Sobre minha questão, agradeço a todos, demorei um pouco pra entender as subquerys.
Pelo que entendi, minha solução seria criar uma primeira consulta para depois pesquisar sobre os resultados encontrados.
Ex.
SELECT * FROM --SELECT 2 (SELECT * FROM A --SELECT 1) WHERE ... GROUP BY ...
Desta forma, primeiro ele obtém a primeira consulta e, logo em seguida, realiza uma consulta com os resultados da primeira.
Consegui resolver o meu problema. Muito obrigado a todos.
GOSTEI 0