我有一个列(成员),其中包含一个包含不同数量元素的数组。
例如
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/