我写了这样的查询来检查 json 列是否有键
SELECT *
FROM "details"
where ("data"->'country'->'state'->>'city') is not null;
但我需要编写查询,如果“数据”包含“城市”,它将选择行
数据json结构不一致
最佳答案
您可以使用 ?
检查 data
的 top-level 键,如 documentation 中所述.
例如
SELECT * FROM details
WHERE data ? 'city';
检查 json 列中所有嵌套对象中的每个键需要递归 CTE
select * from details
where 'city' in (
WITH RECURSIVE t(k,j) as (
select jsonb_object_keys(details.data), details.data
UNION ALL
select jsonb_object_keys(t.j->t.k), t.j->t.k
FROM t WHERE jsonb_typeof(t.j->t.k) = 'object'
)
select k from t
);
这当然效率不高。
关于sql - Postgresql JSON 列检查键是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36195409/