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

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

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

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

Ответ
 
Опции темы
Старый 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
Адрес: Северодонецк, Украина
Сообщений: 15,716
Репутация: 5728
По умолчанию

Примерно так, но чем больше 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




02:06.


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

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


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

RusProfile.ru


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