鑒于這張表
| 父母 | 有效載荷 |
|---|---|
| 1 | { a: 7, b: 3 } |
| 2 | { a: 7, c: 3 } |
| 1 | { d: 3, e: 1, f: 3 } |
我想更新的兒童1,并洗掉任何屬性X那里payload->X是3。
執行查詢后,記錄應如下所示:
| 父母 | 有效載荷 |
|---|---|
| 1 | { a: 7 } |
| 2 | { a: 7, c: 3 } |
| 1 | { e: 1 } |
update records set payload=?? where parent = 1 and ??
uj5u.com熱心網友回復:
沒有內置的 inf 函式,但您可以撰寫自己的:
create function remove_keys_by_value(p_input jsonb, p_value jsonb)
returns jsonb
as
$$
select jsonb_object_agg(t.key, t.value)
from jsonb_each(p_input) as t(key, value)
where value <> p_value;
$$
language sql
immutable;
然后你可以這樣做:
update records
set payload = remove_key_by_value(payload, to_jsonb(3))
where parent = 1;
這假設payload定義為jsonb(它應該是)。如果不是,你必須投射它:payload::jsonb
uj5u.com熱心網友回復:
嘗試這個
update records
set payload = payload - 'x'
where parent = 1 and payload->>'x'::int = 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/355175.html
標籤:sql PostgreSQL jsonb
上一篇:SparkSQL:在表的列中選擇10個隨機選擇的值組
下一篇:SQL-每小時選擇最高數量類別
