Есть ли альтернатива «IN» в T-SQL? - PullRequest
0 голосов
/ 25 сентября 2018

Рассмотрим этот фрагмент кода:

SELECT 
    vbs.SKUID, SKUName, SUM(vbs.Quantity) AS Qty
FROM   
    BatchStocks AS vbs
WHERE  
    vbs.SKUID IN (Here i have almost 12000 SKU)
    AND vbs.StoreID IN (%q)
    AND vbs.StockType = %n
GROUP BY
    vbs.SKUID, vbs.SKUName

В состоянии where у меня есть почти 12000 SKUID, для выполнения которых требуется много времени.Подскажите, пожалуйста, как я могу улучшить этот запрос?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы также можете использовать Inner Join, EXISTS вместо IN.Пожалуйста, обратитесь запрос EXISTS:

SELECT 
    vbs.SKUID, SKUName, SUM(vbs.Quantity) AS Qty
FROM   
    BatchStocks AS vbs
WHERE  
    EXISTS ( select 1 from #TEMPTABLE t on t.SKUID = vbs.SKUID)
    AND vbs.StoreID IN (%q)
    AND vbs.StockType = %n
GROUP BY
    vbs.SKUID, vbs.SKUName

Пожалуйста, обратитесь ниже запрос для INNER JOIN:

SELECT 
    vbs.SKUID, SKUName, SUM(vbs.Quantity) AS Qty
FROM   
    BatchStocks AS vbs
    INNER JOIN #TEMPTABLE t on t.SKUID = vbs.SKUID
WHERE  vbs.StoreID IN (%q)
    AND vbs.StockType = %n
GROUP BY
    vbs.SKUID, vbs.SKUName
0 голосов
/ 25 сентября 2018

вы можете использовать EXISTS()

поместить SKU во временную таблицу

и

WHERE  vbs.SKUID IN (Here i have almost 12000 SKU)

изменить на

WHERE  EXISTS
       (
           SELECT *
           FROM   #TEMP x
           WHERE  x.SKUID  = vbs.SKUID 
       )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...