Consulta com Join retornando valor duplicado

19/10/2018

0

Boa tarde, estou enfrentando um problema, preciso da ajuda de vocês.
Preciso extrair todos os campos das tabelas sem repetir o ItemId da InventTable.

Porém o relacionamento entre a InventTable e EcoResProduct é de 1:N.
Como resolvo essa situação?
Fiz uma consulta usando apenas as 2 tabelas.

SELECT * FROM InventTable	
	 WHERE InventTable.Product IN (SELECT EcoResProduct.RecId FROM EcoResProduct)


Retornou o que eu precisava, porém preciso das outras tabelas também, como incremento no código?

Código que estou usando;

SELECT * FROM InventTable	
	 --WHERE InventTable.Product IN (SELECT EcoResProduct.RecId FROM EcoResProduct)
	  JOIN  EcoResProduct ON InventTable.Product = EcoResProduct.RecId
	    LEFT JOIN  EcoResProductDimensionGroupProduct ON EcoResProductDimensionGroupProduct.RecId = EcoResProductDimensionGroupProduct.Product
		   LEFT join ECORESPRODUCTDIMENSIONGROUP ON ECORESPRODUCTDIMENSIONGROUP.RECID = ECORESPRODUCTDIMENSIONGROUPPRODUCT.PRODUCT
			 LEFT JOIN EcoResProductTranslation ON EcoResProduct.RecId = EcoResProductTranslation.Product
			 	LEFT JOIN InventItemGroupItem ON InventTable.ItemId = InventItemGroupItem.ItemId
				and InventTable.dataAreaId = InventItemGroupItem.ItemDataAreaId
						LEFT JOIN InventModelGroupItem ON InventTable.ItemId = InventModelGroupItem.ItemId
						and InventTable.dataAreaId = InventModelGroupItem.ItemDataAreaId
							LEFT JOIN EcoResStorageDimensionGroupItem ON InventTable.ItemId = EcoResStorageDimensionGroupItem.ItemId
							AND InventTable.dataAreaId = EcoResStorageDimensionGroupItem.ItemDataAreaId
								left  JOIN EcoResTrackingDimensionGroupItem ON InventTable.ItemId = EcoResTrackingDimensionGroupItem.ItemId
								and InventTable.dataAreaId = EcoResTrackingDimensionGroupItem.ITEMDATAAREAID
									left JOIN WHSInventTable ON InventTable.ItemId = WHSInventTable.ItemId
										WHERE INVENTTABLE.DATAAREAID = ''br01''
					
		ORDER BY INVENTTABLE.ITEMID


Resultado semelhante

ItemId    Language
000001    PT-BR
000001    EN
000001    USA
000002    PR-BR


Preciso que mostre apenas 1 vez a Conta o ItemId e traga todos os campos das outras tabelas.

Obrigado
Eduardo

Eduardo

Responder

Post mais votado

25/10/2018

Bom dia! Você tentou usar um DISTINCT logo após o SELECT?
 SELECT DISTINCT * FROM WHERE 

Maicon Scapatici

Maicon Scapatici
Responder

Mais Posts

25/10/2018

Alex Lekao

Oi Eduardo, boa tarde!!!

Vamos ver se consigo de ajudar de alguma forma.

Vamos tentando ver o que conseguimos.

Fiz uma observação no seu codigo para eu entender melhor, e vamos vendo o que conseguimos.

SELECT 
   * 
FROM InventTable as IT
--WHERE IT.Product IN (SELECT EcoResProduct.RecId FROM EcoResProduct)
LEFT JOIN  EcoResProduct AS ERP ON IT.Product = ERP.RecId
LEFT JOIN  EcoResProductDimensionGroupProduct AS ERPDGP ON ERPDGP.RecId = ERPDGP.Product -- Aqui você vai relacionar a própria tabela com ela mesma?
LEFT join ECORESPRODUCTDIMENSIONGROUP AS ERPDG ON ERPDG.RECID = ERPDGP.PRODUCT
LEFT JOIN EcoResProductTranslation AS ERPT ON ERPT.Product = ERP.RecId
LEFT JOIN InventItemGroupItem AS IIGI ON IIGI.ItemId = IT.ItemId and IIGI.ItemDataAreaId = IT.dataAreaId
LEFT JOIN InventModelGroupItem AS IMGI ON IMGI.ItemId = IT.ItemId and IMGI.ItemDataAreaId = IT.dataAreaId 
LEFT JOIN EcoResStorageDimensionGroupItem AS ERSDGI ON ERSDGI.ItemId = IT.ItemId AND ERSDGI.ItemDataAreaId = IT.dataAreaId 
left  JOIN EcoResTrackingDimensionGroupItem AS ERTDGI ON ERTDGI.ItemId = IT.ItemId and ERTDGI.ITEMDATAAREAID = IT.dataAreaId 
left JOIN WHSInventTable AS WIT ON WIT.ItemId = IT.ItemId 
WHERE IT.DATAAREAID = ''br01''
ORDER BY IT.ITEMID


Evite utilizar * no select principal, informe quais os campos que vc quer visualizar, assim seu codigo fica mais limpo e acaba de certo modo melhorando o uso de memoria.

Atenciosamente,
Responder

08/01/2019

Tiago Souza

Eduardo, você pode dar um exemplo do resultado que você deseja?
Responder

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

Aceitar