Har*_*ish 3 postgresql json 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);
Run Code Online (Sandbox Code Playgroud)
上表keyset中的所有行都不存在,我的查询是
SELECT * FROM test WHERE jsondata->>'keyset' = 10;
Run Code Online (Sandbox Code Playgroud)
上面的查询给出了空结果,预期的输出是
jsondata
------------------------------------
{"key1": 1, "keyset": [10, 20, 30]}
{"key1": 1, "keyset": [10, 20]}
Run Code Online (Sandbox Code Playgroud)
你想要的是这个
SELECT jsondata @> '{"keyset": [10]}' FROM foo;
Run Code Online (Sandbox Code Playgroud)
所以它看起来像这样
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
Run Code Online (Sandbox Code Playgroud)
该@>运营商将检查在PostgreSQL的遏制。我把选择显示给你的评价..
SELECT jsondata
FROM foo
WHERE jsondata @> '{"keyset": [10]}';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5663 次 |
| 最近记录: |