我有一个称为test的表。该表内有一列称为jsonb的字母。在此列内的数据为[],[“ a”],[“ b”],[“ a”,“ b”,“ c”],但没有键值。我如何查询包含其中之一的所有行,例如“ b”(因此,最后2行)?
我所拥有的目前无法正常工作。
我正在尝试:
.gitignore
也尝试过
SELECT *
FROM db.test
WHERE (letters->>'')::jsonb ?| array['b'];
答案 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)