Как удалить проверку условий в операторе предложения where?

#sql #sql-server #where-clause

#sql #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 .....
 

Комментарии:

1. Пожалуйста, предоставьте примеры данных, желаемые результаты и четкое объяснение логики, которую вы хотите.

Ответ №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))
 

Объясните:

  • Использование 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
 

Комментарии:

1. Отвечает ли это на ваш вопрос? Дайте мне знать, если вам нужна какая-либо помощь ^^! @Хоанг Мин