假设我有这个问题,
SELECT T.A FROM T WHERE T.A IN (CASE WHEN T.B = 1 THEN (1,2,3) ELSE (4,5) END)
是否可以或任何替代此查询。
答案 0 :(得分:5)
不要在where子句
上使用大小写SELECT T.A FROM T WHERE (T.A IN (1,2,3) And T.B = 1) or (T.A in (4,5) and T.B <>1)
答案 1 :(得分:3)
CASE
是一个表达式 - 它返回一个定义良好的类型的单个结果:
评估条件列表并返回多个可能的结果表达式之一。
对于一些复杂的WHERE
子句,使用它可能是有意义的(你的当前一个可以解决,因为@Somebody有麻烦的答案显示),但你需要构造它以返回一个结果价值或表达:
SELECT T.A FROM T WHERE
1 = CASE
WHEN T.B = 1 AND T.A IN (1,2,3) THEN 1
WHEN T.A IN (4,5) THEN 1
END
答案 2 :(得分:2)
SELECT T.A
FROM T
WHERE T.B = 1 AND T.A IN (1,2,3)
OR T.B <> 1 AND T.A IN (4,5)
OR T.B IS NULL AND T.A IN (4,5) ;