首页 > 解决方案 > 如何删除 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 .....

标签: sqlsql-serverwhere-clause

解决方案


你可以这样做

AND (ISNULL(keyword, '') = '' OR (pv.AdminPost = 1 OR pv.IsStaff = 1))

解释:

  • 使用函数来获取空值ISNULL(),以防万一。keywordnull
  • 如果keyword is NULL or blank,则由于条件,剩余的条件将不会运行OR。例子:
false or true  --> true
true  or false --> true
true  or true  --> true
false or false --> false

推荐阅读