Postgresql
當所有值都具有相同的類似 json 的結構時,如何在 JSONB 列中查詢?
在 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 語句來返回上面的行,將 b2 (1231342138adc2fehj3j21321321321kjk1423j32k9) 的值作為輸入參數。
就像是:
SELECT * FROM table WHERE [Column2 contains b which contains b2 which has value '1231342138adc2fehj3j21321321321kjk1423j32k9'] ;
要不就:
SELECT * FROM table WHERE [value '1231342138adc2fehj3j21321321321kjk1423j32k9' exists in row from Column2 ]
我只是不知道如何給出這個指令。
任何幫助是極大的讚賞。
您可以
jsonb_path_exists
與 JSON 路徑查詢一起使用SELECT * FROM t WHERE jsonb_path_exists(t.jsonColumn, '$.b[*].b2 ? (@ == "1231342138adc2fehj3j21321321321kjk1423j32k9")')
在
[*]
此路徑中的意思是“任何數組元素”,並且? (@ == ...)
表示該路徑上的值必須等於您的值的謂詞。