如何将JSON数据添加或合并到现有MySQL行的JSON字段中?

时间:2018-06-07 11:02:26

标签: mysql json

我有一个像这样的现有表:

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)我只能更新第一行,第二行保持不变。

是否只有一个命令可以解释这两种情况?

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;