Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2016, 16:01   #1
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию Case в Where

Привет всем.
Пытаюсь написать запрос, который бы в зависимости от параметра производил фильтрацию строк по определенному условию.
Т.е. хотел бы получить что-то типа такого:
Код:
SELECT *
  FROM m_user m
 WHERE m.key IN CASE
                   WHEN :usr = -1
                   THEN
                      m.key                      -- вернуть всех пользователей
                   WHEN :usr = 0
                   THEN
                      (SELECT t.key
                         FROM my_table t
                        WHERE t.key = 1) -- отфильтровать людей по полу. Но вот тут как раз возвращается несколько строк, что выдает ошибку
                   ELSE
                      :usr                 -- вернуть конкретного пользователя
                END
Как можно иначе написать запрос, чтобы была поддержка фильтрации в зависимости от параметра?

Последний раз редактировалось m9yt; 09.08.2016 в 16:13.
m9yt вне форума Ответить с цитированием
Старый 09.08.2016, 16:18   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Примерно так, но чем больше or, тем менее эффективный запрос. Лучше отдельные запросы, по крайней мере разные строки с where
Код:
WHERE :usr=-1 or (:usr = 0 and m.key in (select ...)) or m.key=:usr
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение из case 1 в case 2(switch(), язык Си) Павел_95 Помощь студентам 13 11.01.2013 14:18
case of Ekzamenator Помощь студентам 2 12.11.2011 17:55
CASE drikusik# Помощь студентам 4 16.12.2009 15:22