【问题标题】:How to remove condition check in the where clause statement?如何删除 where 子句语句中的条件检查?
【发布时间】:2021-02-05 00:51:47
【问题描述】:

我想知道如何在下面的查询中使用 if/else 或 case 语句或任何可以达到目的的语句。 这个想法是,每当关键字为 NULL 或空白时,我都不想在 Where 语句中包含 pv.AdminPost = 1 and pv.IsStaff = 1 条件。

有什么办法吗?谢谢。

    ;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 .....

【问题讨论】:

  • 请提供样本数据、期望的结果以及您想要的逻辑的清晰解释。

标签: sql sql-server where-clause


【解决方案1】:

您必须使用正确的括号和OR 条件,如下所示:

WHERE @InculdePublicPosts = 1 
  AND ((@keyword IS NULL OR @keyword = '')  OR pv.AdminPost = 1 OR pv.IsStaff = 1)
  AND (pv.Id =  @PostId OR pv.[Description] LIKE '%' + @Keyword + '%' OR @keyword IS NULL )

【讨论】:

    【解决方案2】:

    你可以这样做

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

    说明:

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

    【讨论】:

    • 这能回答你的问题吗?如果您需要任何帮助,请告诉我^^! @黄明
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多