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 子句中的多项选择的主要内容,如果未能解决你的问题,请参考以下文章

lambda 表达式使用 select 和 where 子句连接多个表

选择不同的值,传递到 Where 子句

嵌套选择中的 WHERE 子句

SQL 优化 where 子句中的条件

SQL在where子句中使用子选择中的列

是否可以使用“WHERE”子句来选择 SQL 语句中的所有记录?