powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по CASE
8 сообщений из 8, страница 1 из 1
Вопрос по CASE
    #32058457
kreek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ли в предикате прикрутить CASE таким образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
DECLARE @i = int
SELECT
*
FROM
T1
INNER JOIN
T2
ON
T2.t1 = T1
AND
CASE ISNULL(@i, - 1 )
WHEN - 1  THEN  0  =  0 
ELSE T2.i = @i


т.е. если передали NULL то не должно быть условия в джойне
...
Рейтинг: 0 / 0
Вопрос по CASE
    #32058459
Фотография Alexes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то я уже это видел :)
Зачем тут case?
SELECT
*
FROM
T1
INNER JOIN
T2
ON
T2.t1 = T1
WHERE T2.i = @i or @i IS NULL
...
Рейтинг: 0 / 0
Вопрос по CASE
    #32058463
kreek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если это будет OUTER JOIN?
...
Рейтинг: 0 / 0
Вопрос по CASE
    #32058466
kreek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
the ability to specify Transact-SQL outer joins in the WHERE clause is not recommended, is no longer documented, and will be dropped in a future release.
...
Рейтинг: 0 / 0
Вопрос по CASE
    #32058467
Yossarian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто мешает написать :

SELECT * FROM
T1 LEFT JOIN T2
ON
T2.t1 = T1 AND
(T2.i = @i or @i IS NULL)

???
...
Рейтинг: 0 / 0
Вопрос по CASE
    #32058468
Фотография Alexes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А при чем тут OUTER JOIN в WHERE?
...
Рейтинг: 0 / 0
Вопрос по CASE
    #32058474
kreek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Alexes, Yossarian спасибо.
Чо то я немного притормаживать стал.

-- А при чем тут OUTER JOIN в WHERE?
Сначала выполняются условия в FROM, а потом в WHERE. При OUTER JOIN это имеет значение.
...
Рейтинг: 0 / 0
Вопрос по CASE
    #32058499
Фотография akuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
DECLARE @i = int
SELECT *
FROM T1
  LEFT JOIN T2 ON T2.t1 = T1 AND T2.i = 
    CASE ISNULL(@i, - 1 )
    WHEN - 1  THEN T2.i
    ELSE @i
    END

Но в вашем случае не нужно
Код: plaintext
1.
2.
3.
DECLARE @i = int
SELECT *
FROM T1
  LEFT JOIN T2 ON T2.t1 = T1 AND T2.i = ISNULL(@i,T2.i)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по CASE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]