我正在尝试确定postgres数组字段中的值是否与另一个表中的值相对应。
我有一张桌子:汽车
id | name | contents
1 | Ford | {1, 3, 5}
和表:内容
id | name | desc
1 | Phone | ....
2 | Keys | ....
我想看看内容(字段)中的任何值是否与内容(表)中的任何ID相对应。这是一个Postgres数据库。
答案 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关系,而不是把它推到一个数组中。
请参阅: