我有一个jsonbjsonb_data
列的postgresql表:
| jsonb_data |
| --------------------------------------------------- |
| [ {"a": {"aa": "", "ab": 0}, "b": null, "c": ""} ] |
| [ {"a": {"aa": ""}, "b": {"ba": "", "bb": 0} ] |
| [ "c": {"ca": 1} ] |
| [ "b": {"bb": 0} ] |
如何选择存在的所有行"b"? 这个查询必须返回这样的行:
| jsonb_data |
| --------------------------------------------------- |
| [ {"a": {"aa": "", "ab": 0}, "b": null, "c": ""} ] |
| [ {"a": {"aa": ""}, "b": {"ba": "", "bb": 0} ] |
| [ "b": {"bb": 0} ] |
CREATE temp TABLE test_like (
data jsonb
);
INSERT INTO test_like
VALUES ('[{"a": {"aa": "", "ab": 0}}, {"b": null, "c": ""} ] '),
('[ {"a": {"aa": ""}}, {"b": {"ba": "", "bb": 0}}]'),
('[ {"c": {"ca": 1}} ]'),
('[ {"b": {"bb": 0}} ]');
WITH cte AS (
SELECT
data,
jsonb_path_exists(data, '$[*].b')
FROM
test_like
)
SELECT
data
FROM
cte
WHERE
jsonb_path_exists;