选择所有PostgreSQL行,其中json列包含特定键

时间:2016-05-02 23:13:42

标签: json postgresql postgresql-9.3

给定带有json列的PostgreSQL 9.3表,如何编写一个查询,选择json列包含指定键的所有行?我对json散列的值不感兴趣,只是对象是否包含给定的键。

2 个答案:

答案 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;

http://sqlfiddle.com/#!15/69a72/1

有点奇怪,应该是一个更好,更常见的案例解决方案。我尝试过几次,没有运气