Return 仅与 Inner Join 首次匹配

Return only first match with Inner Join

我在下面有这个查询,它有效。但是,运行 需要 30 多分钟。本质上,sku 字段是唯一的,但它所连接的表具有多个对应于 entity_id 的值。我只想 return 它找到的第一个值。我知道我现在这样做的方式有效,但它根本没有效率。任何提示将不胜感激。

抱歉出现奇怪的代码示例。无法在代码选项下格式化。

谢谢!

SELECT
FROM
(
 SELECT DISTINCT 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
) AS a
WHERE a.RowNumber = 1

试试这个

    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