Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Программирование

SQL.Case в Where. Выбор одного или всех мест хранения : Программирование

23.11.2024 10:55


01.10.2019 16:38
Доброго дня!!!
Задача передать один параметр в запрос и получить одно или все МХ. Пытаюсь через case, но в секции Then должно быть одно значение, а не набор данных.
Подскажите, как правильно реализовать?
SQL код:
select *
  from smgoods g
 where g.storeloc in
       (case :a 
             when - 1 then (select mx.id from smstorelocations mx) 
        else (select mx.id from smstorelocations mx where mx.id = :a) 
        end) 
01.10.2019 17:39
Если правильно понял задачу - фильтр по MX примерно такой: -1 - любое, или :a - конкретное.
Тогда зачем усложнять, чем не устраивает
SQL код:
where ( g.storeloc=:a or :a=-1 ) 
01.10.2019 17:50
Если все то g.storeloc <> -1 (неравно), а если одно, то чему то равно. Смена не значения, а знака, условия.
01.10.2019 18:51
vdm, не правильно понял. Если :a = -1, то g.storeloc <> -1, Иначе g.storeloc = :a .
01.10.2019 19:55
Цитата:
karachun vdm, не правильно понял
он как раз правильно понял, это ты неправильно написал :) посмотри на первое сообщение.
По ЦО (-1) остатков быть не должно,
Цитата:
karachun :a = -1, то g.storeloc <> -1
требуешь все и из этого при -1 будет работать только правая часть условия
Цитата:
vdm :a=-1
SQL код:
where -1=-1 
т.е. все, а при а равном чему-то другому останется только левая часть условия, как раз то, что ты просишь и очень красиво.
02.10.2019 08:29
Да, действительно. Так и есть. Конец дня, усталость.
Спасибо!!!
Часовой пояс GMT +3, время: 10:55.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.