powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Case или не Case, как лучше?
8 сообщений из 8, страница 1 из 1
Case или не Case, как лучше?
    #39832205
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Воспрос наипростейший, но хотелось бы иметь обоснованное понимание использовать ли case в where или использовать иную форму.

пример без case:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
TOP 1
*
FROM tblTest
WHERE
		(@idRole<2 and ((r.id_owner=@idUser) or (r.id_ownershop=@idUserShop))) 
		or
		(@idRole=2 and r.id_owner=r.id_owner)



C Case
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT
TOP 1
*
FROM tblTest
WHERE
	r.id_owner= case
					when @idRole<2 then @idUser
					else r.id_owner
				end
	r.id_ownershop= case
						when @idRole<2 then @idUserShop
						else r.id_ownershop
					end



Как правильно и по фэншую? :)

Спасибо :)
...
Рейтинг: 0 / 0
Case или не Case, как лучше?
    #39832214
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2K,

смотрите на план запроса.
...
Рейтинг: 0 / 0
Case или не Case, как лучше?
    #39832232
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

Понедельник день тяжелый после активных выходных :)

Спасибо, разобрался. В данном примере case лучше.
...
Рейтинг: 0 / 0
Case или не Case, как лучше?
    #39832251
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше всего UNION
...
Рейтинг: 0 / 0
Case или не Case, как лучше?
    #39832280
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2KВладислав Колосов,

Понедельник день тяжелый после активных выходных :)

Спасибо, разобрался. В данном примере case лучше.

Вы не определили значение слова "лучше", что это?
...
Рейтинг: 0 / 0
Case или не Case, как лучше?
    #39832331
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2K
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
TOP 1
*
FROM tblTest
WHERE
		(@idRole<2 and ((r.id_owner=@idUser) or (r.id_ownershop=@idUserShop))) 
		or
		(@idRole=2 and r.id_owner=r.id_owner)




Тут точно нет ошибки?

При @idRole=2 у вас предикат поиска "сворачивается" до
Код: sql
1.
r.id_owner=r.id_owner


если id_owner not null, то он верен для всех записей
...
Рейтинг: 0 / 0
Case или не Case, как лучше?
    #39832358
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

Если я мои знания верны, то при такой записи
@idRole=2 and r.id_owner=r.id_owner

я получаю абсолютно все записи, ошибки нет. r.id_owner not null
...
Рейтинг: 0 / 0
Case или не Case, как лучше?
    #39832384
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2KmsLex,

Если я мои знания верны, то при такой записи
@idRole=2 and r.id_owner=r.id_owner

я получаю абсолютно все записи, ошибки нет. r.id_owner not nullТогда там достаточно оставить @idRole=2
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Case или не Case, как лучше?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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