如何将JSON数据添加或合并到现有MySQL行的JSON字段中?
我有一个这样的现有表:如何将JSON数据添加或合并到现有MySQL行的JSON字段中?,mysql,json,Mysql,Json,我有一个这样的现有表: id | json ---+---------- 1 | {"1":"1"} 2 | NULL id | json ---+---------- 1 | {"1":"1", "2":"2"} 2 | {"2":"2"} 我希望能够将{“2”:“2”}合并到任何一个现有行中,无论json字段是否已经包含json或为空。 看起来是这样的: id | json ---+---------- 1 | {"1":"1"} 2 | NULL id | json --
id | json
---+----------
1 | {"1":"1"}
2 | NULL
id | json
---+----------
1 | {"1":"1", "2":"2"}
2 | {"2":"2"}
我希望能够将{“2”:“2”}
合并到任何一个现有行中,无论json字段是否已经包含json或为空。
看起来是这样的:
id | json
---+----------
1 | {"1":"1"}
2 | NULL
id | json
---+----------
1 | {"1":"1", "2":"2"}
2 | {"2":"2"}
使用updatetable SET json=CAST(“{”2:“2”}”为json),其中id=1)
I只能更新第二行或覆盖第一行
使用updatetable SET json=json\u MERGE(json,CAST(“{”2:“2”}”为json),其中id=1)
I只能更新第一行,第二行保持不变
有一个命令可以解释这两种情况吗?一种方法是将当前的
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;