我想在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]}
答案 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)
.