在 postgresql 数据库中,我有一个包含 2 列的表:
Column1 是 VARCHAR 类型,包含多行 id,格式如下:ID1123312
Column2 是 JSONB 类型,包含多行具有以下结构的 json:
{
"a": [
{
"a1": "2022-01-01",
"a2": "2026-01-31",
"a3": 1
}
],
"b": [
{
"b1": "J",
"b2": "1231342138adc2fehj3j21321321321kjk1423j32k9"
}
],
"c": [
{
"c1-1": "2021-02-01",
"c1-2": "2021-01-01"
},
{
"c2-1": "2021-04-01",
"c2-2": "2021-03-01"
}
]
}
我需要构建一个 SELECT 语句以仅从Column2 的所有行返回 b2 属性的值。如果它只有一行,那么只有'1231342138adc2fehj3j21321321321kjk1423j32k9'。如果它有多行,则它在每行内的每个 jsonb 中找到的任何值。
任何帮助是极大的赞赏。
我试过了:
SELECT *
FROM t
WHERE jsonb_path_exists(t.jsonColumn, '$.b[*].b2 ? (@ == "1231342138adc2fehj3j21321321321kjk1423j32k9")')
SELECT * 返回表的整行,但我不知道如何指示它只返回 b2 属性包含的任何值(嵌套在行中的 json 内)。