Nic*_*ach 3 sql postgresql json sql-update jsonb
我正在尝试更新以下内容y.data,它是当前包含 NULL 值的 JSONB 类型列。该||命令似乎无法y.data与x.datawhen x.datais NULL 合并在一起。x.data当包含 JSONB 值时它工作正常。
这是一个示例查询。
UPDATE x
SET x.data = y.data::jsonb || x.data::jsonb
FROM (VALUES ('2018-05-24', 'Nicholas', '{"test": "abc"}')) AS y (post_date, name, data)
WHERE x.post_date::date = y.post_date::date AND x.name = y.name;
Run Code Online (Sandbox Code Playgroud)
x.data修改此查询以支持更新具有现有值或为 NULL 的行的最佳方法是什么?
将任何内容与nullProduce连接起来null。您可以使用coalesce()或 条件逻辑来解决此问题:
SET x.data = COALESCE(y.data::jsonb || x.data, y.data::jsonb)
Run Code Online (Sandbox Code Playgroud)
或者:
SET x.data = CASE WHEN x.data IS NULL
THEN y.data::jsonb
ELSE y.data::jsonb || x.data
END
Run Code Online (Sandbox Code Playgroud)
请注意,无需显式转换x.data为jsonb,因为它jsonb已经是一列。