sql - Postgresql - 从选择中删除元素的 Array_remove

标签 sql arrays postgresql

我有一个列(成员),其中包含一个包含不同数量元素的数组。

例如

id   members (integer[])
1    {1, 3, 5, 7}
2    {4, 5, 7, 9}

我有一个表 (unwanted_members),其中包含我希望删除的成员(如果存在的话),例如

member
1
7

我想从数组中删除这些成员,即

id  members
1   {3, 5}
2   {4, 5, 9}

谁能推荐一个简单的方法?

最佳答案

如果安装 intarray扩展这很容易:

select id, members - (select array_agg(member) from unwanted_members)
from foo;

要更新表格,您可以使用:

update foo
    set members = members - (select array_agg(member) from unwanted_members);

如果没有该扩展,您首先需要取消成员 ID 的嵌套,移除不需要的,然后将它们聚合回一个数组:

select f.id, array_agg(t.mid order by t.idx) as members
from foo f, unnest(f.members) with ordinality as t(mid,idx)
where t.mid not in (select member from unwanted_members)
group by f.id;

要更新现有值,请使用:

update foo
  set members = x.members
from (
  select f.id, array_agg(t.mid order by t.idx) as members
  from foo f, unnest(f.members) with ordinality as t(mid,idx)
  where t.mid not in (select id from unwanted_members)
  group by f.id
) x
where foo.id = x.id;

假设id是表的主键。

关于sql - Postgresql - 从选择中删除元素的 Array_remove,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49626115/

相关文章:

php - 如何通过键的一部分过滤数组?

javascript - 删除 Javascript 中的空子数组

sql - 如何编写查询以在最小函数中允许 null

php - 在 MySQL 中处理多个数组数据的最佳方式?

sql - Postgres - 如何使用 UNION ALL 实现 UNION 行为?

php - while 在 foreach 循环内的 if 语句内循环......效果不佳

sql - 强制所有列具有不同的值

php - 来自数据库的sql查询

SQL JOIN 与同一个表

python pgdb挂数据库