Consulta com Join retornando valor duplicado
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.
Retornou o que eu precisava, porém preciso das outras tabelas também, como incremento no código?
Código que estou usando;
Resultado semelhante
Preciso que mostre apenas 1 vez a Conta o ItemId e traga todos os campos das outras tabelas.
Obrigado
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
Curtidas 1
Melhor post
Maicon Scapatici
25/10/2018
Bom dia! Você tentou usar um DISTINCT logo após o SELECT?
SELECT DISTINCT * FROM WHERE
GOSTEI 3
Mais Respostas
Alex Lekao
19/10/2018
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.
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,
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,
GOSTEI 2
Tiago Souza
19/10/2018
Eduardo, você pode dar um exemplo do resultado que você deseja?
GOSTEI 0