【问题标题】:Remove overlap entries from postgres arrays从 postgres 数组中删除重叠条目
【发布时间】:2016-03-23 20:47:51
【问题描述】:

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

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

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

基本上我需要的是这个概念的一个真正的工作版本,我知道这是行不通的。

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

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

谢谢!

【问题讨论】:

    标签: arrays postgresql


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 非常感谢!看起来这完全正确
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多