给定带有json列的PostgreSQL 9.3表,如何编写一个查询,选择json列包含指定键的所有行?我对json散列的值不感兴趣,只是对象是否包含给定的键。
答案 0 :(得分:2)
如果它符合您的需求(并且您不会在JSON中存储NULL值),我认为最简单的方法就是:
SELECT * FROM table WHERE (data->'key') IS NOT NULL;
答案 1 :(得分:0)
如果你的表有一个带主键的额外列,这应该可以正常工作
create table t (i integer primary key, j json, t text);
insert into t values
(1,'{"id1":"a", "id2":"b"}','xxx'),
(2,'{"id1":"a", "id3":"c"}', null),
(3,'{"id2":"a", "id4":"b"}', null),
(4,'{"id1":"x", "id6":"v"}','yyy');
select t.* from t join (select i as h,json_object_keys(j) as q from t) k on q='id1' and h=i;
有点奇怪,应该是一个更好,更常见的案例解决方案。我尝试过几次,没有运气