假設我有一個students列型別的表jsonb,我在其中存盤了一個包含學生其他電子郵件的串列。學生行看起來像這樣
| 學生卡 | 姓名 | 電子郵件 |
|---|---|---|
| 1 | 約翰·多伊 | [[email protected]] |
我正在使用以下查詢來更新emails列:
UPDATE students SET emails = emails || '["[email protected]"]'::jsonb
WHERE student_id=1
AND NOT emails @> '["[email protected]"]'::jsonb;
emails填充該列后,如果我使用引數重復使用上面的查詢["[email protected]", "[email protected]"],則該列emails將使用重復值更新:
| 學生卡 | 姓名 | 電子郵件 |
|---|---|---|
| 1 | 學生 1 | [[email protected], [email protected], [email protected]] |
有沒有辦法確保在列中emails我總是有一個只有唯一值的 jsonb 串列?
uj5u.com熱心網友回復:
使用這個方便的函式從 jsonb 陣列中洗掉重復項:
create or replace function jsonb_unique_array(jsonb)
returns jsonb language sql immutable as $$
select jsonb_agg(distinct value)
from jsonb_array_elements($1)
$$;
您的更新陳述句可能如下所示:
update students
set emails = jsonb_unique_array(emails || '["[email protected]", "[email protected]"]'::jsonb)
where student_id=1
and not emails @> '["[email protected]", "[email protected]"]'::jsonb
在db<>fiddle 中測驗它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/354259.html
標籤:数组 json PostgreSQL 独特的 jsonb
上一篇:為什么當我用stl向量替換陣列時,我的代碼會變慢,在C 中,陣列是否比向量更快?
下一篇:void函式不回傳任何內容-C
