Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 09.08.2016, 17:01   #1
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 106
Репутация: 10
По умолчанию 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 в 17:13.
m9yt вне форума   Ответить с цитированием
Старый 09.08.2016, 17:18   #2
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 16,247
Репутация: 5820
По умолчанию

Примерно так, но чем больше or, тем менее эффективный запрос. Лучше отдельные запросы, по крайней мере разные строки с where
Код:

WHERE :usr=-1 or (:usr = 0 and m.key in (select ...)) or m.key=:usr

__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар на форуме   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение из 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 16:22




16:43.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru