我正在尝试从查询中找到的数组字段中删除条目。
tablename.listfield :: integer []有一个完整列表
我试图从该字段中删除值列表,这些值在更新查询中收集。
ARRAY_REMOVE方法只接受单个值,而int[] - int[]
的intarray模块似乎不是一个选项。
ARRAY[] && ARRAY[]
可以布尔返回,但这对我没有帮助
基本上我需要的是这个概念的真实工作版本,我知道它不起作用。
UDPATE tablename SET listfield = ARRAY_REMOVE( listfield, ( select id from othertable ) )
是否有可能通过棘手的CTE设置或其他方式完成这项工作?
谢谢!
答案 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)