postgresql Postgres:我如何清空多个WHERE IN(a,B,c,...)子句?

bkhjykvo  于 2023-01-25  发布在  PostgreSQL
关注(0)|答案(1)|浏览(153)

在Javascript这样的编程语言中,而不是:

['a', 'b', 'c', 'd'].map(...);
['a', 'b', 'c', 'd'].filter(...);
['a', 'b', 'c', 'd'].forEach(...);

我可以做到以下几点:

const names = ['a', 'b', 'c', 'd'];

names.map(...);
names.filter(...);
names.forEach(...);

如果文件中有多个SQL语句:

SELECT * FROM foo WHERE something IN ('a', 'b', 'c', 'd');
SELECT * FROM bar WHERE something_else IN ('a', 'b', 'c', 'd');
SELECT * FROM baz WHERE another_thing IN ('a', 'b', 'c', 'd')

是否有类似的方法可以“创建一个数组变量”,然后在所有这些查询中重复使用它?我知道事情会变得复杂,因为('a', 'b', 'c', 'd')实际上不是一个数组,我不确定是否应该使用一个文本变量、一个视图或一个函数来保存('a', 'b', 'c', 'd')部分。

juzqafwq

juzqafwq1#

最接近的类比是临时表。

CREATE TEMP TABLE targets (t text);
COPY targets FROM stdin;
a
b
c
d
...thousands more rows
\.

SELECT foo.* FROM foo JOIN targets ON foo.x = targets.t

但是,在数据库中,需要将一组值与多个表进行匹配的情况并不常见,因为这可能意味着您的数据库结构需要修改。

相关问题