postgres:在 WHERE 子句中使用 CASE 和 ANY()
Posted
技术标签:
【中文标题】postgres:在 WHERE 子句中使用 CASE 和 ANY()【英文标题】:postgres: use of CASE and ANY() in WHERE clause 【发布时间】:2011-06-30 00:51:06 【问题描述】:有什么办法可以做到吗?
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
,因为我需要匹配一个数组。这可行吗?
【问题讨论】:
【参考方案1】:使用 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)
编辑:格式化
【讨论】:
【参考方案2】:您必须更改 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)
【讨论】:
以上是关于postgres:在 WHERE 子句中使用 CASE 和 ANY()的主要内容,如果未能解决你的问题,请参考以下文章