如何确定数组中的值是不是存在于 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 表中的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 JavaScript 中的值检查对象是不是在数组中?