這作業正常:
jsonb_path_query(p.blah::jsonb, '$[*] ? (@.fruit == "banana") ')
但是如果我想將 JSON“水果”屬性與列中的值進行比較,我無法讓 Postgres 決議它,如下所示:
jsonb_path_query(p.blah::jsonb, '$[*] ? (@.fruit == c.fruit) ')
我遇到難以理解的錯誤,例如“語法錯誤,jsonpath 輸入末尾的意外 IDENT_P”
uj5u.com熱心網友回復:
所有 JSONpath 函式還接受一個額外的 JSON 引數,其中包含可以在 JSON 路徑運算式中參考的鍵/值對:
jsonb_path_query(jsonb_column,
'$[*] ? (@.fruit == $fp)',
jsonb_build_object('fp', c.fruit) )
uj5u.com熱心網友回復:
用于format()構建第二個引數,例如:
with my_table (fruit, json_col) as (
values
('banana', '[{"fruit": "banana"}, {"fruit": "apple"}]'::jsonb),
('apple', '[{"fruit": "pear"}]'),
('plum', '[{"fruit": "pear"}, {"fruit": "plum"}]')
)
select
fruit,
jsonb_path_query(json_col, format('$[*] ? (@.fruit == "%s")', fruit)::jsonpath)
from my_table;
fruit | jsonb_path_query
-------- ---------------------
banana | {"fruit": "banana"}
plum | {"fruit": "plum"}
(2 rows)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/511367.html
上一篇:使用查詢結果作為另一個查詢的元素
