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

PostgreSQL如何查询表中未被其他数组包含的数组记录

查询未被其他数组包含的记录实现方案

测试环境准备

首先创建测试表:

CREATE TABLE temp
(
    id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    arr bigint[] NOT NULL
);

插入测试数据:

INSERT INTO temp (arr) VALUES
(ARRAY[2, 3]),
(ARRAY[2,3,4]),
(ARRAY[4]),
(ARRAY[1, 2, 3]);

插入完成后表内共4条记录,arr字段对应值分别为[2,3]、[2,3,4]、[4]、[1,2,3]。
需求:查询返回所有未被表中其他任意数组包含的数组记录,预期结果为id=2、id=4两行的arr列数据。

实现SQL

基于PostgreSQL的数组包含运算符@>(运算符左侧数组包含右侧数组全部元素时返回真),通过NOT EXISTS过滤掉存在被其他记录包含的条目即可,语句如下:

SELECT id, arr
FROM temp t1
WHERE NOT EXISTS (
    SELECT 1
    FROM temp t2
    WHERE t2.id != t1.id
      AND t2.arr @> t1.arr
);

逻辑说明

  • 逐行判断当前记录t1,如果能找到任意一条id不同的记录t2,且t2的数组包含t1的数组,就排除当前t1记录
  • 最终保留的就是不存在任何其他数组能包含它的记录,执行后返回结果和预期一致:id=2的[2,3,4]、id=4的[1,2,3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:36:17