PSQL中jsonb字段内数组元素匹配的Where查询语句编写问题
PostgreSQL 10 jsonb数组元素匹配查询方案
你可以用以下两种兼容PostgreSQL 10.0版本的方案实现需求,直接把语句中的X和Y替换为你实际需要匹配的键值即可:
方案1:使用jsonb_array_elements拆分数组匹配(逻辑直观,无额外索引也可运行)
SELECT DISTINCT name FROM Name_TagsTable, jsonb_array_elements(tagValues -> 'tags') AS tag_element WHERE tag_element ->> 'key' = 'X' AND tag_element ->> 'value' = 'Y';
- 逻辑说明:先把
tagValues里的tags数组拆成单独的jsonb元素行,再筛选同时符合key和value条件的行,最后去重返回name即可。
方案2:使用jsonb包含操作符@>(性能更优,可配合GIN索引加速查询)
SELECT name FROM Name_TagsTable WHERE tagValues -> 'tags' @> '[{"key": "X", "value": "Y"}]'::jsonb;
- 逻辑说明:直接判断tags数组是否包含至少一个符合
{"key":"X","value":"Y"}结构的元素,写法更简洁,若你的tagValues字段提前创建了GIN索引,该查询的执行效率会远高于方案1。
内容的提问来源于stack exchange,提问作者Tarun Annapareddy
相关产品推荐
相关产品推荐

