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

Postgres中JSONB字段多值过滤的WHERE IN等效实现方法

PostgreSQL JSONB字段多值过滤的简洁实现

方法1:提取文本值后使用IN子句

这是最贴近你熟悉的WHERE IN语法的实现方式,通过->>操作符将JSONB中的country字段提取为文本类型,直接用普通IN进行多值匹配:

SELECT * FROM test
WHERE features->>'country' IN ('Sweden', 'Norway', 'Denmark');

这种写法和常规字段的多值过滤逻辑完全一致,可读性很高。

方法2:使用JSONB操作符结合ANY数组

如果希望保留JSONB原生操作符的风格,可以将多个匹配条件构造成JSONB数组,通过@>和ANY组合实现多值匹配:

SELECT * FROM test
WHERE features @> ANY(ARRAY['{"country": "Sweden"}'::jsonb, '{"country": "Norway"}'::jsonb]);

性能优化建议

  • 如果使用第一种方法,建议为提取表达式创建索引:
    CREATE INDEX idx_test_features_country ON test ((features->>'country'));
    
  • 如果使用第二种方法,确保features字段已有GIN索引(适合JSONB的@>操作):
    CREATE INDEX idx_test_features_gin ON test USING GIN (features);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:24:31