【问题标题】: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 数据库。

【问题讨论】:

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

标签: sql postgresql postgresql-9.2


【解决方案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 关系,而不是将其塞入数组中。

    见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-06
      • 2021-11-04
      • 1970-01-01
      • 2012-06-29
      • 2021-04-16
      • 1970-01-01
      • 2014-05-07
      • 2013-03-22
      相关资源
      最近更新 更多