PostgreSQL数组列过滤:筛选不被其他数组完全包含的数组
解决方案
假设你的表名为test_table,可以使用PostgreSQL的数组包含操作符@>结合NOT EXISTS子查询来实现需求:
SELECT t1.col FROM test_table t1 WHERE NOT EXISTS ( SELECT 1 FROM test_table t2 WHERE t2.col @> t1.col AND t2.col <> t1.col );
逻辑说明
t2.col @> t1.col:判断t2的数组是否完全包含t1的数组(PostgreSQL数组包含操作符不关心元素顺序,只检查元素集合)t2.col <> t1.col:排除数组自身(避免自己包含自己的情况干扰结果)NOT EXISTS:筛选出不存在任何其他数组能完全包含它的数组,也就是你需要的结果
验证结果
针对你提供的测试数据,执行上述SQL后会得到预期输出:
col ----------- {1,5,6} {5,6,7} {2} {3} {4}
内容的提问来源于stack exchange,提问作者rjo
相关产品推荐
相关产品推荐

