PostgreSQL: WHERE子句中使用CASE和ANY()的方法

14

有没有一种方法可以使其正常工作?

SELECT
*
FROM table t
INNER JOIN othertable t2 USING (tid)
WHERE
t.tid =
CASE
    WHEN t2.someboolval THEN ANY(ARRAY[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])
    ELSE ANY(ARRAY[77,66])
END

很遗憾,我不能只是简单地执行 t.tid = CASE WHEN t2.someboolval THEN 1 ELSE 2 END,因为我需要与一个数组进行匹配。这可行吗?

2个回答

13
使用AND/OR。例如:
  SELECT
  *
  FROM table t
  INNER JOIN othertable t2 USING (tid)
  WHERE
     t2.someboolval AND t.tid IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) 
     OR NOT (t2.someboolval) and t.id IN (77,66)

编辑:格式化


6

您需要改变ANY的位置:

SELECT
*
FROM table t
INNER JOIN othertable t2 USING (tid)
WHERE
  t.tid =
  ANY(CASE
    WHEN t2.someboolval THEN ARRAY[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
    ELSE ARRAY[77,66]
  END)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接