Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 JOIN по NULLable параметру  [new]
relief
Member

Откуда:
Сообщений: 1197
Есть параметр@Items
Если он передается, то надо джойн делать по переданным значениям, которые вставляются во временную таблицу
Если он NULL, то не надо джойнить и сделать запрос по всем данным

Как это сделать без 2 запросов с джойном и без? (запросы большие)

автор
@Items VARCHAR(MAX) = NULL

CREATE TABLE @tbl

INSERT tbl
SELECT * FROM Items


SELECT * FROM Sales
JOIN ?????


2 апр 13, 16:49    [14127519]     Ответить | Цитировать Сообщить модератору
 Re: JOIN по NULLable параметру  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
relief, напишите запрос для каждого случая с фильтром по @Items и объедините через UNION ALL
2 апр 13, 16:53    [14127540]     Ответить | Цитировать Сообщить модератору
 Re: JOIN по NULLable параметру  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
общую большую часть можно вынести в cte
2 апр 13, 16:53    [14127548]     Ответить | Цитировать Сообщить модератору
 Re: JOIN по NULLable параметру  [new]
relief
Member

Откуда:
Сообщений: 1197
Shakill
relief, напишите запрос для каждого случая с фильтром по @Items и объедините через UNION ALL



этоn SELECT сам идет как вложенный подзапрос и на него вешается джойн снаружи
2 апр 13, 16:57    [14127573]     Ответить | Цитировать Сообщить модератору
 Re: JOIN по NULLable параметру  [new]
Гость333
Member

Откуда:
Сообщений: 3683
WHERE @Items IS NULL OR Item_Id IN (SELECT Item_Id FROM #tmp)
2 апр 13, 16:58    [14127580]     Ответить | Цитировать Сообщить модератору
 Re: JOIN по NULLable параметру  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
relief
Shakill
relief, напишите запрос для каждого случая с фильтром по @Items и объедините через UNION ALL

этоn SELECT сам идет как вложенный подзапрос и на него вешается джойн снаружи
а что это меняет?
2 апр 13, 17:00    [14127594]     Ответить | Цитировать Сообщить модератору
 Re: JOIN по NULLable параметру  [new]
relief
Member

Откуда:
Сообщений: 1197
Гость333
WHERE @Items IS NULL OR Item_Id IN (SELECT Item_Id FROM #tmp)


так работает в 5 раз медленней чем с джойном
2 апр 13, 17:03    [14127616]     Ответить | Цитировать Сообщить модератору
 Re: JOIN по NULLable параметру  [new]
relief
Member

Откуда:
Сообщений: 1197
Shakill
relief
пропущено...

этоn SELECT сам идет как вложенный подзапрос и на него вешается джойн снаружи
а что это меняет?


я делаю так

if @items is null
  with cte as (....)
else
  with cte as (....)

select * from sales s 
    join cte  c


так вот cte создать нельзя
2 апр 13, 17:05    [14127622]     Ответить | Цитировать Сообщить модератору
 Re: JOIN по NULLable параметру  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
relief,

может, так?

WITH cte AS ( ... )
SELECT ... FROM cte 
WHERE @Items IS NULL
UNION ALL
SELECT ... FROM cte JOIN Tbl ON ...
WHERE @Items IS NOT NULL
2 апр 13, 17:11    [14127649]     Ответить | Цитировать Сообщить модератору
 Re: JOIN по NULLable параметру  [new]
relief
Member

Откуда:
Сообщений: 1197
Shakill
relief,

может, так?

WITH cte AS ( ... )
SELECT ... FROM cte 
WHERE @Items IS NULL
UNION ALL
SELECT ... FROM cte JOIN Tbl ON ...
WHERE @Items IS NOT NULL


Сэнкс!
2 апр 13, 17:26    [14127728]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить