我有一个像这样的现有表:
id | json
---+----------
1 | {"1":"1"}
2 | NULL
我希望能够将{"2":"2"}
合并到任何一个现有行中,而json字段已经包含JSON或者为NULL。
它看起来像那样:
id | json
---+----------
1 | {"1":"1", "2":"2"}
2 | {"2":"2"}
UPDATE table SET json = CAST('{"2":"2"}' AS JSON) WHERE id=1)
我只能更新第二行或覆盖第一行。
UPDATE table SET json = JSON_MERGE(json, CAST('{"2":"2"}' AS JSON) WHERE id=1)
我只能更新第一行,第二行保持不变。
是否只有一个命令可以解释这两种情况?
答案 0 :(得分:1)
一种方法是COALESCE
当前json
列,相当于JSON术语中的空字符串:
UPDATE yourTable
SET json = JSON_MERGE(COALESCE(json, CAST('{}' AS JSON)), CAST('{"2":"2"}' AS JSON))
WHERE id = 1;
另一种快速而肮脏的方法是使用CASE
表达式来决定是合并还是简单地覆盖:
UPDATE yourTable
SET json = CASE WHEN json IS NOT NULL
THEN JSON_MERGE(json, CAST('{"2":"2"}' AS JSON))
ELSE CAST('{"2":"2"}' AS JSON) END
WHERE id = 1;