Postgresql 同一值集中多个列的IN子句

Postgresql 同一值集中多个列的IN子句,postgresql,Postgresql,我有一个WHERE子句,如下所示: 其中t1.col1 IN('a','b','c')或t2.col2 IN('a','b','c'); 我知道子句中的两个始终具有相同的内容。我有没有办法避免复制它们 比如: 其中(t1.col1或t2.col2)在('a','b','c')中 您可以使用数组运算符: where array[t1.col1, t2.col2] && array['a','b','c'] 有两种方法可以在PostgreSQL中使用一些常量值。使用如上所示的CT

我有一个
WHERE
子句,如下所示:

其中t1.col1 IN('a','b','c')或t2.col2 IN('a','b','c');
我知道子句中的两个
始终具有相同的内容。我有没有办法避免复制它们

比如:

其中(t1.col1或t2.col2)在('a','b','c')中
您可以使用数组运算符:

where array[t1.col1, t2.col2] && array['a','b','c']
有两种方法可以在PostgreSQL中使用一些常量值。使用如上所示的CTE。或使用“选项”:


但请注意,不会使用
col1
col2
上的索引(如果有)。
with flt(x) as (values('{a,b,c}'::text[]))
select
...
from ..., flt
where t1.col1 = any(flt.x) or t2.col2 = any(flt.x);
set foo.bar to '{a,b,c}';
select '{c,d,e}'::text[] && current_setting('foo.bar')::text[];