[SQL SERVER] LEFT JOIN repetindo resultados

11/05/2017

0

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.

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

Alan Luna

Responder

Post mais votado

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

Fabio Parreira

Fabio Parreira
Responder

Mais Posts

11/05/2017

Emerson Nascimento

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
Responder

24/07/2017

Alan Luna

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.

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar