Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Case или не Case, как лучше? / 8 сообщений из 8, страница 1 из 1
01.07.2019, 12:01
    #39832205
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Case или не Case, как лучше?
Добрый день!
Воспрос наипростейший, но хотелось бы иметь обоснованное понимание использовать ли 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
01.07.2019, 12:29
    #39832214
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Case или не Case, как лучше?
Kast2K,

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

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

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

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

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

Вы не определили значение слова "лучше", что это?
...
Рейтинг: 0 / 0
01.07.2019, 14:58
    #39832331
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Case или не Case, как лучше?
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
01.07.2019, 15:30
    #39832358
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Case или не Case, как лучше?
msLex,

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

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

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

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


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