множественный выбор в предложении where - PullRequest
0 голосов
/ 20 января 2020

Мне нужно сделать множественный выбор в предложении where

select * 
  from BATS
  where REASON in
case when :P12_REASON = 'Rejects' then ('online', 'offline') else '' end
and
case when :P12_REASON = 'accepted' then ('online', 'offline', 'written') else '' end
and
goings on.....

Ответы [ 2 ]

2 голосов
/ 20 января 2020

Необходимо переписать предложение, используя AND logi c:

SELECT *
FROM BATS
WHERE (:P12_REASON = 'Rejects' AND REASON IN ('online', 'offline') OR
       :P12_REASON = 'accepted' AND REASON IN ('online', 'offline', 'written'))
  AND -- goings on...

Обратите внимание, что скобки вокруг этого лога c необходимы, чтобы избежать неправильной группировки с логами c после AND.

1 голос
/ 20 января 2020

Как правило, лучше использовать AND / OR вместо case выражений в предложении WHERE.

select * 
from BATS
where :P12_REASON = 'Rejects' AND REASON IN ('online', 'offline')
   or :P12_REASON = 'accepted' AND REASON IN ('online', 'offline', 'written')
   ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...