这是我的表数据:
对应的sqlfiddle - http://sqlfiddle.com/#!17/e3f09
create table jsonData (
id serial primary key,
data jsonb
);
insert into jsonData (data) values (
$${
"b": 2,
"c": [
{
"d": {
"e": true
}
},
{
"d": {
"e": true
}
},
{
"d": {
"e": true,
"f": "I'm here"
}
}
]
}
$$::jsonb),
(
$${
"a": 1,
"c": [
{
"d": {
"e": true
}
},
{
"d": {
"e": true
}
},
{
"d": {
"e": true
}
}
]
}$$::jsonb);
Run Code Online (Sandbox Code Playgroud)
问题是 - 如何选择存在“f”属性(路径在任何地方都相同 - 'c -> d -> f')存在的所有记录?
使用 anEXISTS
来jsonb_array_elements()
获取数组的元素并->'d'->'f'
检查NULL
.
SELECT *
FROM jsonData
WHERE EXISTS (SELECT *
FROM jsonb_array_elements(data->'c')
WHERE value->'d'->'f' IS NOT NULL);
Run Code Online (Sandbox Code Playgroud)