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

PostgreSQL如何判断数组所有元素是否存在于表的指定列中?

检查数组所有元素是否存在于表列并返回布尔值

方法1:PostgreSQL 原生数组操作(推荐)

直接利用PostgreSQL的数组运算符和聚合函数,简洁高效:

SELECT array['a', 'b', 'c'] <@ array_agg(DISTINCT test) AS all_exists
FROM t;
  • array_agg(DISTINCT test):把表t的test列去重后聚合成一个数组
  • <@:数组包含运算符,判断左边数组的所有元素是否都在右边数组里,直接返回true或false

如果test列本身没有重复值,可以去掉DISTINCT加快查询:

SELECT array['a', 'b', 'c'] <@ array_agg(test) AS all_exists
FROM t;

方法2:通用SQL写法(适配多数数据库)

如果用的不是PostgreSQL,或者需要跨数据库兼容,可以用统计匹配数量的方式:

SELECT 
  (SELECT COUNT(DISTINCT val) 
   FROM UNNEST(array['a', 'b', 'c']) AS val
   WHERE val IN (SELECT test FROM t)) = 3 AS all_exists;
  • UNNEST:将数组拆分成单独的行(不同数据库语法略有差异,比如MySQL用JSON_TABLE,SQL Server用STRING_SPLIT,核心逻辑一致)
  • 统计数组中能在test列找到的元素数量,和数组总长度(这里是3)对比,相等就说明所有元素都存在

如果数组长度不确定,PostgreSQL可以用array_length动态获取:

SELECT 
  (SELECT COUNT(DISTINCT val) 
   FROM UNNEST(array['a', 'b', 'c']) AS val
   WHERE val IN (SELECT test FROM t)) = array_length(array['a','b','c'], 1) AS all_exists;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:01:01