sql - 将 CASE WHEN 添加到 WHERE 子句
问题描述
我使用了以下WHERE
子句
WHERE (TYPE1 = :P3_ITEM1 OR :P3_ITEM1 IS NULL)
过滤我对 TYPE1 的查询,当页面项目 P3_ITEM1 不为空时,它可以很好地显示相同 TYPE1 的记录。
现在我需要为 TYPE2 和 TYPE3 添加另外两个过滤器。通常只有一个页面项目 P3_ITEM1、P3_ITEM2 或 P3_ITEM3 不为空,因此我需要筛选不为空的任何一个。
我试过
WHERE (TYPE1=:P3_ITEM1 OR :P3_ITEM1 IS NULL) OR
(TYPE2=:P3_ITEM2 OR :P3_ITEM2 IS NULL) OR
(TYPE3=:P3_ITEM3 OR :P3_ITEM3 IS NULL)
但它没有用。
我尝试在 WHERE 子句中使用 CASE 语句,但到目前为止没有成功。任何人都可以帮忙吗?
WHERE CASE
WHEN (:P3_ITEM1 IS NOT NULL) THEN (TYPE1=:P3_ITEM1)
WHEN (:P3_ITEM2 IS NOT NULL) THEN (TYPE2=:P3_ITEM2)
WHEN (:P3_ITEM3 IS NOT NULL) THEN (TYPE3=:P3_ITEM3)
解决方案
您可以简单地使用AND
来组合各种过滤器。如果参数为 ,则每个过滤器都将评估为 true NULL
,因此如果所有三个参数都为 ,则NULL
您将获得所有记录,但您可以填写任何一个,甚至所有三个参数来过滤掉不需要的记录。
WHERE
(TYPE1 = :P3_ITEM1 OR :P3_ITEM1 IS NULL) AND
(TYPE2 = :P3_ITEM2 OR :P3_ITEM2 IS NULL) AND
(TYPE3 = :P3_ITEM3 OR :P3_ITEM3 IS NULL)
推荐阅读
- firebase - 如何使用 Kotlin(包括图像)将数据从 firebase 检索到回收器视图中?
- c# - 在 web.config 文件中添加处理程序时,未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
- python - I wanted to know if there is any way to turn the bot command into an on_message event command?
- node.js - onWrite 聚合函数
- android - 在firebase函数中处理字符串
- c# - 根据请求值确定操作方法的名称
- css - 移动响应查询
- hadoop - 无法在 Hadoop 3.2.1 上执行 hadoop jar 命令:连接异常失败:java.net.ConnectException:连接被拒绝;
- python - 使用 send.keys 后出现意外字符 - 三星 s20 设备
- debugging - 为什么 Logger.log 语句不显示在日志中?