从postgres数组

时间:2016-03-23 20:47:52

标签: arrays postgresql

我正在尝试从查询中找到的数组字段中删除条目。

tablename.listfield :: integer []有一个完整列表 我试图从该字段中删除值列表,这些值在更新查询中收集。 ARRAY_REMOVE方法只接受单个值,而int[] - int[]的intarray模块似乎不是一个选项。

如果有重叠,ARRAY[] && ARRAY[]可以布尔返回,但这对我没有帮助

基本上我需要的是这个概念的真实工作版本,我知道它不起作用。

UDPATE tablename SET listfield = ARRAY_REMOVE( listfield, ( select id from othertable ) )

是否有可能通过棘手的CTE设置或其他方式完成这项工作?

谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定你为什么说intarray似乎不是一个选项,因为它运作得很好:

... SET listfield = listfield - ( SELECT array_agg(id) FROM othertable )

但是如果你想在不安装扩展程序的情况下这样做,你可以UNNEST数组并使用EXCEPT构造:

... SET listfield = ARRAY(SELECT UNNEST(listfield) EXCEPT SELECT id FROM othertable)