You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何查找两数组列共同值并将其从tar列中移除

PostgreSQL数组交集元素移除实现方案

方法1:直接使用intarray扩展的差集运算符(适配你现有代码)

你当前代码里用的&数组交集运算符本身就是intarray扩展提供的,所以直接用同扩展的-运算符即可快速实现tar数组减去交集的需求:

WITH t1 AS (
    SELECT DISTINCT ind, tar
    FROM table_1
    JOIN table_2 USING (id) 
    LIMIT 50
),
t2 AS (
    SELECT 
        ind, 
        tar - (ind & tar) AS tar
    FROM t1
)
SELECT * FROM t2;

方法2:通用原生语法(无需扩展,支持任意类型数组)

如果不想依赖扩展或者是其他元素类型的数组,可以通过拆分、过滤、重组数组的方式实现:

WITH t1 AS (
    SELECT DISTINCT ind, tar
    FROM table_1
    JOIN table_2 USING (id) 
    LIMIT 50
),
t2 AS (
    SELECT ind & tar AS common_el, ind, tar 
    FROM t1
)
SELECT 
    ind,
    COALESCE(ARRAY_AGG(tar_element), '{}') AS tar
FROM t2
LEFT JOIN LATERAL unnest(tar) AS t(tar_element)
ON tar_element <> ALL(common_el) -- 过滤掉同时存在于ind里的元素
GROUP BY ind, tar;

两种方案都可以完全匹配你给出的预期输出结果,如果需要保留tar数组的原始元素顺序,在方法2的ARRAY_AGG里加上排序规则即可。

内容的提问来源于stack exchange,提问作者joasa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:36:03