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

PostgreSQL中如何编写JSONB数组条件查询语句?

PostgreSQL JSONB数组查询实现方案

我有一张Table_A表,结构和数据如下:

nameemail_addresses
a['test@test.com']
b['test@test.com', 'test2@test.com']
c['aatest@test.com', 'bbtest2@test.com']
d['test@test.com', 'test2@test.com', 'aa@bb.cc']

其中email_addresses字段类型为JSONB。需要查询**不同时包含test@test.com和test2@test.com**的记录(预期结果为name为a、c、d的记录),以下是两种可行的PostgreSQL查询写法:

方法1:使用NOT + @>操作符

@>是PostgreSQL JSONB类型的包含操作符,用于判断左侧数组是否包含右侧数组的所有元素。加上NOT即可排除同时拥有两个指定邮箱的记录:

SELECT * 
FROM Table_A 
WHERE NOT (email_addresses @> '["test@test.com", "test2@test.com"]'::jsonb);

方法2:遍历数组元素统计匹配数

通过jsonb_array_elements_text展开数组元素,统计匹配指定邮箱的数量,筛选出匹配数小于2的记录:

SELECT t.*
FROM Table_A t
WHERE (
  SELECT COUNT(*) 
  FROM jsonb_array_elements_text(t.email_addresses) e
  WHERE e IN ('test@test.com', 'test2@test.com')
) < 2;

说明

两种方法都能得到预期结果:

  • 方法1更简洁高效,适合直接判断数组包含关系的场景;
  • 方法2灵活性更强,可扩展用于更复杂的元素匹配统计需求。

内容的提问来源于stack exchange,提问作者alexmorgan.cr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:25:20