POI*_*OIR 20 sql select case switch-statement where-in
在where子句中使用case是否可行?像这样的东西:
DECLARE @Status VARCHAR(50);
SET @Status='published';
SELECT * FROM Product P
WHERE P.Status IN (CASE WHEN @Status='published' THEN (1,3)
WHEN @Status='standby' THEN (2,5,9,6)
WHEN @Status='deleted' THEN (4,5,8,10)
ELSE (1,3)
END)
Run Code Online (Sandbox Code Playgroud)
此代码提供错误:','附近的语法不正确.
jue*_*n d 27
不,你不能使用case和in喜欢这个.但你可以做到
SELECT * FROM Product P
WHERE @Status='published' and P.Status IN (1,3)
or @Status='standby' and P.Status IN (2,5,9,6)
or @Status='deleted' and P.Status IN (4,5,8,10)
or P.Status IN (1,3)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你可以减少到
SELECT * FROM Product P
WHERE @Status='standby' and P.Status IN (2,5,9,6)
or @Status='deleted' and P.Status IN (4,5,8,10)
or P.Status IN (1,3)
Run Code Online (Sandbox Code Playgroud)
既然or P.Status IN (1,3)给你所有的记录@Status='published' and P.Status IN (1,3)
我意识到这已经得到了回答,但是接受的解决方案存在一些问题.它会返回误报.易于修复:
SELECT * FROM Products P
WHERE (@Status='published' and P.Status IN (1,3))
or (@Status='standby' and P.Status IN (2,5,9,6))
or (@Status='deleted' and P.Status IN (4,5,8,10))
or (@Status not in ('published','standby','deleted') and P.Status IN (1,2))
Run Code Online (Sandbox Code Playgroud)
不需要括号(尽管可能更容易阅读,因此我将它们包括在内).