нужна помощь в оптимизации этого выражения SQL - PullRequest
2 голосов
/ 28 августа 2010

в предложении WHERE моего запроса у меня есть этот код:


...
where @PageID in (...subquery...) or not exists(...subquery...)
...

где подзапрос одинаков в обоих случаях. то есть я хочу, чтобы @PageID появлялся в подзапросе, только если подзапрос не пустой. Есть ли способ использовать подзапрос один раз с тем же эффектом?

спасибо константин

1 Ответ

1 голос
/ 29 августа 2010

Предполагая, что ваш текущий запрос похож на

DECLARE @PageID INT = -100

SELECT *
FROM sys.objects
WHERE @PageID IN (SELECT number FROM  master.dbo.spt_values) 
   OR NOT EXISTS(SELECT number FROM  master.dbo.spt_values)

Я думаю, что это эквивалентно

SELECT *
FROM sys.objects
WHERE 
ISNULL((SELECT MIN(CASE WHEN number = @PageID THEN 0 ELSE 1 END) 
                                                       FROM dbo.spt_values),0)=0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...