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

在WHERE子句中使用jsonb数组:Directives表过滤查询问题

正确的PostgreSQL JSONB数组过滤查询

你的原SQL存在两个问题:一是IN子句语法错误(PostgreSQL要求用圆括号而非方括号),二是类型不匹配——filters->'names'返回的是jsonb数组,无法直接和字符串集合做比较。以下是两种符合需求的正确查询方式:

方法一:使用?|操作符(简洁高效)

?|是PostgreSQL专门为jsonb数组提供的操作符,用于判断数组是否包含指定字符串数组中的任意一个元素:

SELECT * FROM directives
WHERE filters->'names' ?| ARRAY['yourname', 'theirname'];

方法二:使用jsonb_array_elements_text展开数组(灵活拓展)

如果需要对数组元素做更复杂的逻辑处理,可以先将jsonb数组展开为文本行,再通过EXISTS子查询判断:

SELECT * FROM directives d
WHERE EXISTS (
    SELECT 1 
    FROM jsonb_array_elements_text(d.filters->'names') AS name
    WHERE name IN ('yourname', 'theirname')
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:09:51