2017-09-08 2 views
0

J'ai cette requête ci-dessous et cela fonctionne. Cependant, il faut plus de 30 minutes pour courir. Essentiellement, le champ sku est unique, mais les tables auxquelles il se joint ont plusieurs valeurs qui correspondent à l'entity_id. Je veux seulement retourner la première valeur trouvée. Je comprends que la façon dont je le fais fonctionne maintenant, mais ce n'est pas efficace du tout. Tous les conseils seraient grandement appréciés.Retourne seulement le premier match avec Inner Join

Désolé pour l'exemple de code bizarre. Impossible de le mettre en forme sous l'option de code.

Merci!

SELECT 
 
FROM 
 
(
 
\t SELECT DISTINCT substring(sku, 1, 
 
\t (
 
\t SELECT CASE 
 
\t \t WHEN charindex('-', sku)-1 = -1 
 
\t \t THEN 0 
 
\t \t ELSE charindex('-', sku)-1 
 
\t END 
 
\t)) AS sku, 
 
\t CAST(cpet.value AS varchar(max)) AS 'DESCRIPTION', cpev.value AS 'URL_KEY', CONCAT('https://azureedge.net/catalog/product', cpemg.value) AS 'image', ROW_NUMBER() OVER(PARTITION BY sku ORDER BY sku) AS RowNumber 
 
\t FROM imp_mg.CATALOG_Product_Entity cpe 
 
\t INNER JOIN 
 
\t imp_mg.CATALOG_Product_Entity_Text cpet 
 
\t ON cpe.entity_id = cpet.entity_id 
 
\t INNER JOIN 
 
\t imp_mg.CATALOG_Product_Entity_Varchar cpev 
 
\t ON cpe.entity_id = cpev.entity_id 
 
\t INNER JOIN 
 
\t imp_mg.CATALOG_Product_Entity_Media_Gallery cpemg 
 
\t ON cpe.entity_id = cpemg.entity_id 
 
) AS a 
 
WHERE a.RowNumber = 1

Répondre

1

essayer cette

SELECT top 1 substring(sku, 1, 
     (
     SELECT CASE 
      WHEN charindex('-', sku)-1 = -1 
      THEN 0 
      ELSE charindex('-', sku)-1 
     END 
     )) AS sku, 
     CAST(cpet.value AS varchar(max)) AS 'DESCRIPTION', cpev.value AS 'URL_KEY', CONCAT('https://azureedge.net/catalog/product', cpemg.value) AS 'image', ROW_NUMBER() OVER(PARTITION BY sku ORDER BY sku) AS RowNumber 
     FROM imp_mg.CATALOG_Product_Entity cpe 
     INNER JOIN 
     imp_mg.CATALOG_Product_Entity_Text cpet 
     ON cpe.entity_id = cpet.entity_id 
     INNER JOIN 
     imp_mg.CATALOG_Product_Entity_Varchar cpev 
     ON cpe.entity_id = cpev.entity_id 
     INNER JOIN 
     imp_mg.CATALOG_Product_Entity_Media_Gallery cpemg 
     ON cpe.entity_id = cpemg.entity_id 

ORDER BY sku 
+0

Merci pour votre réponse. J'ai couru la requête et l'ai tué à 27 minutes. Je vais essayer de gérer toutes les jointures dans le pipeline Azure à la place. J'espère que cela allégera la charge des requêtes réelles. –