查询不带键的JSONB

时间:2019-11-21 17:36:13

标签: sql postgresql jsonb

我有一个称为test的表。该表内有一列称为jsonb的字母。在此列内的数据为[],[“ a”],[“ b”],[“ a”,“ b”,“ c”],但没有键值。我如何查询包含其中之一的所有行,例如“ b”(因此,最后2行)?

我所拥有的目前无法正常工作。

我正在尝试:

.gitignore

也尝试过

SELECT *
    FROM db.test
    WHERE (letters->>'')::jsonb ?| array['b'];

2 个答案:

答案 0 :(得分:1)

如果您使用的是postgres 12,则可以使用jsonb_path_exists:

# create table test (letters jsonb);
# insert into test VALUES ('[]'), ('["a"]'), ('["a", "b", "c"]');
# select letters
  FROM test where jsonb_path_exists(letters, 'strict $[*] ? (@ == "b")');
     letters
-----------------
 ["a", "b", "c"]
(1 row)


答案 1 :(得分:1)

使用遏制运算符:

select *
from test
where letters @> '"b"'

Db<>fidlle.