这是我的表数据:
对应的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)
| 归档时间: |
|
| 查看次数: |
17720 次 |
| 最近记录: |