0

假设我有这个查询,

SELECT T.A FROM T WHERE T.A IN (CASE WHEN T.B = 1 THEN (1,2,3) ELSE (4,5) END)

是否有可能或任何替代此查询的方法。

4

3 回答 3

5

不要在 where 子句上使用 case

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) 
于 2012-06-20T06:28:48.467 回答
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
于 2012-06-20T06:35:35.060 回答
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) ;
于 2012-06-20T06:34:41.500 回答