Я пытаюсь написать запрос (Microsoft SQL Server) выглядит как:Tsql Case запрос Постулаты
select productid from T1
union
select productid from T2
union
select ProductID from T3
Вопрос заключается в том, что я хочу, чтобы один из этого союза будет зависеть от значения (позволяет говорят @x) Итак, я пишу этот запрос:
select case when @x=1 then productid end
from T1
union
select productid from T2
union
select ProductID from T3
Но его все еще сканировать все T1.
Я знаю, что «Case» сканировать таблицу, даже если его не соответствует условию: выберите случай, когда 1 = 2, то ProductID конец от T1 Как я могу написать запрос, который основывают на значение теперь, если выполнить или не ?? Что-то вроде: Если @ х = 1, затем выберите ProductID из конца T1 .... * Мне нужно найти способ без динамического SQL Благодаря
использовать предложение WHERE в первом члене объединения, например: 'select productid from t1, где @ x = 1 union ...' –
Я не могу, потому что @x является независимым, его не является частью t1. Я также попытался: выберите productid из t1, где существует (@ x = 1), но все же он сканирует все t1, даже когда @x! = 1. –
Тогда объясните, что вы на самом деле пытаетесь сделать, потому что я использовал эту технику успешно и эффективно уже почти три десятилетия. –