sql - 如何删除 where 子句语句中的条件检查?
问题描述
我想知道如何在下面的查询中使用 if/else 或 case 语句或任何可以达到目的的语句。这个想法是,每当关键字为 NULL 或空白时,我不想pv.AdminPost = 1 and pv.IsStaff = 1
在 Where 语句中包含条件。
有什么办法吗?谢谢你。
;WITH cte
AS (SELECT fv.Id, fv.[Description]
FROM FeedView fv
WHERE (fv.Id = @PostId OR fv.[Description] LIKE '%' + @Keyword + '%' OR @Keyword IS NULL ) AND fv.ForUserId = @UserId
UNION
SELECT pv.Id, pv.[Description]
FROM PublicView pv
WHERE @InculdePublicPosts = 1 -- This acts as an off switch to decide whether to include public post or not.
OR pv.AdminPost = 1 OR pv.IsStaff = 1 -- how to remove this condition when Keyword is NULL or empty
AND (pv.Id = @PostId OR pv.[Description] LIKE '%' + @Keyword + '%' OR @keyword IS NULL )
)
SELECT cte.Id, cte.[Description]
FROM .....
解决方案
你可以这样做
AND (ISNULL(keyword, '') = '' OR (pv.AdminPost = 1 OR pv.IsStaff = 1))
解释:
- 使用函数来获取空值
ISNULL()
,以防万一。keyword
null
- 如果
keyword is NULL or blank
,则由于条件,剩余的条件将不会运行OR
。例子:
false or true --> true
true or false --> true
true or true --> true
false or false --> false
推荐阅读
- java - 运行 Eclipse 时出错:由于 java.io.EOFException 初始化存储时出错
- javascript - 如何覆盖 javascript 命名空间函数?
- android - 谷歌语音转文本:额外语言设置为“kn”但不起作用
- templates - 在显示字段列表模板中打开一个 url
- python - flask:单元测试时,request.authorization 始终为 None
- scala - 将结构列转换为 Scala 列表
- python - 如何使用 boto3 更新 dynamodb 中项目的多个属性
- mysql - 无法连接到远程 MySQL 服务器错误 2003 (HY000)
- swift - 为什么我不能使用 Swift 解开这个可选值?
- php - 如何在 php 7.2 中设置 mongodb 环境