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

时间:2014-01-29 14:04:32

标签: sql postgresql postgresql-9.2

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

我有一张桌子:汽车

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

和表:内容

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

我想看看内容(字段)中的任何值是否与内容(表)中的任何ID相对应。这是一个Postgres数据库。

2 个答案:

答案 0 :(得分:0)

从id中的内容中选择*(从汽车中选择不需要的(内容))

答案 1 :(得分:0)

您可以使用<@运算符(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));

......但这可能是mismodelling;你可能应该在两个表之间建立一个连接表来建模这个m:n关系,而不是把它推到一个数组中。

请参阅: