Postgresql
如何在postgresql的JSONB類型列中的json結構中選擇特定級別的所有嵌套值?
在 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 內)。
b
似乎每個數組中只有一個對象。因此,您實際上不需要路徑查詢,您可以使用普通的 JSON 訪問器。
->
檢索值作為json(b)
並將->>
其檢索為文本SELECT t.jsonColumn->'b'->0->>'b2' FROM t WHERE t.jsonColumn->'b'->0->>'b2' IN ('Value1', 'Value2');