where 子句中的多项选择
Posted
技术标签:
【中文标题】where 子句中的多项选择【英文标题】:multiple selection in the where clause 【发布时间】:2020-01-20 11:49:04 【问题描述】:需要在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.....
【问题讨论】:
【参考方案1】:你需要使用AND
逻辑重写子句:
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...
请注意,此逻辑周围的括号是必要的,以避免与 AND
之后的逻辑进行不正确的分组。
【讨论】:
【参考方案2】:通常最好在WHERE
子句中使用AND
/OR
而不是case
表达式。
select *
from BATS
where :P12_REASON = 'Rejects' AND REASON IN ('online', 'offline')
or :P12_REASON = 'accepted' AND REASON IN ('online', 'offline', 'written')
...
【讨论】:
以上是关于where 子句中的多项选择的主要内容,如果未能解决你的问题,请参考以下文章