PostgreSQL如何查询JSON数组字段包含指定值的记录ID
PostgreSQL JSON数组包含查询方案
你当前表的bar_id为JSON类型的数值数组,查询包含437的记录id可使用以下两种方案:
- 方案1:兼容现有JSON字段类型,无需修改表结构
SELECT id FROM 你的表名 WHERE EXISTS ( SELECT 1 FROM json_array_elements(bar_id) AS elem WHERE elem::text::int = 437 );
实现逻辑:通过json_array_elements将JSON数组拆分为单元素行,匹配到数值为437的元素时,就返回对应记录的id。
- 方案2:切换为JSONB类型优化查询(推荐)
如果可调整表结构,建议将bar_id字段改为JSONB类型,不仅支持更简洁的包含操作符,还可以创建GIN索引大幅提升查询效率:
-- 可选:修改字段类型为JSONB ALTER TABLE 你的表名 ALTER COLUMN bar_id TYPE jsonb USING bar_id::jsonb; -- 查询语句 SELECT id FROM 你的表名 WHERE bar_id @> '[437]'::jsonb;
内容的提问来源于stack exchange,提问作者neolodor
相关产品推荐
相关产品推荐

