如何确定数组中的值是不是存在于 Postgres 表中

Posted

技术标签:

【中文标题】如何确定数组中的值是不是存在于 Postgres 表中【英文标题】:How can I find out if the values in an array exist in a Postgres table如何确定数组中的值是否存在于 Postgres 表中 【发布时间】:2014-01-29 14:04:31 【问题描述】:

我正在尝试确定 postgres 数组字段中的值是否对应于另一个表中的值。

我有一张桌子:汽车

id | name | contents
1  | Ford | 1, 3, 5

和表格:内容

id | name | desc
1  | Phone | ....
2  | Keys  | ....

我想看看 content(field) 中的任何值是否与 content(table) 中的任何 id 对应。这是一个 Postgres 数据库。

【问题讨论】:

坏方法:你需要一个关系表汽车--->内容 它不允许整数[]整数之间的数组。 【参考方案1】:

select * from contents where id in (select unnest(contents) from cars)

【讨论】:

【参考方案2】:

您可以使用 <@ 运算符 (array-contained-by),它可以使用 intarray 扩展的 GiST opclasses 进行索引:

SELECT ...
FROM cars
INNER JOIN contents ON (ARRAY[contents.id] @< cars.contents);

或使用= ANY:

SELECT ...
FROM cars
INNER JOIN contents ON (contents.id = ANY (cars.contents));

...但这可能是错误的模型;您可能应该在两个表之间建立一个连接表来模拟这种 m:n 关系,而不是将其塞入数组中。

见:

http://www.postgresql.org/docs/current/static/functions-array.html http://www.postgresql.org/docs/current/static/intarray.html

【讨论】:

以上是关于如何确定数组中的值是不是存在于 Postgres 表中的主要内容,如果未能解决你的问题,请参考以下文章

Hive:如何检查一个数组的值是不是存在于另一个数组中?

如何根据 JavaScript 中的值检查对象是不是在数组中?

如何检查一个值是不是存在于Ruby中的数组中

Flutter & Firebase:如何检查某个项目是不是存在于 Firebase 文档中的数组中

如何使用动态正则表达式匹配 Postgres 中的值

如何将数组数据保存到 Laravel postgres 中?