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