PostgreSQL在JSON数组内搜索值

时间:2017-04-14 11:39:16

标签: json postgresql jsonb

我想在PostgreSQL中搜索JSONB中的元素,这里是我的JSON

CREATE TABLE test
AS
  SELECT jsondata::jsonb
  FROM ( VALUES
    ( '{"key1": 1, "keyset": [10, 20, 30]}' ),
    ( '{"key1": 1, "keyset": [10, 20]}' ),
    ( '{"key1": 1, "keyset": [30]}' ),
    ( '{"key1": 1 }' ),
    ( '{"key1": 1, "key2": 1}' )
  ) AS t(jsondata);
上表keyset中的

并不存在于所有行中,而我的查询是

SELECT * FROM test WHERE  jsondata->>'keyset' = 10;

以上查询给出空结果,预期输出为

jsondata
------------------------------------
{"key1": 1, "keyset": [10, 20, 30]}
{"key1": 1, "keyset": [10, 20]}

2 个答案:

答案 0 :(得分:3)

你想要的是这个

SELECT jsondata @> '{"keyset": [10]}' FROM foo;

所以看起来像这样

 SELECT jsondata, jsondata @> '{"keyset": [10]}' FROM foo;
              jsondata               | ?column? 
-------------------------------------+----------
 {"key1": 1, "keyset": [10, 20, 30]} | t
 {"key1": 1, "keyset": [10, 20]}     | t
 {"key1": 1, "keyset": [30]}         | f
 {"key1": 1}                         | f
 {"key1": 1, "key2": 1}              | f

@>运算符检查PostgreSQL中的包含。我在选择中向您展示评估..

SELECT jsondata
FROM foo
WHERE jsondata @> '{"keyset": [10]}';

答案 1 :(得分:1)

.