来自的示例:
我希望结果是:
SET @json1 = '[1, 2]';
SET @json2 = '[2, 3]';
SELECT JSON_MERGE_PATCH(@json1,@json2),JSON_MERGE_PRESERVE(@json1,@json2);
+---------------------------------+------------------------------------+
| JSON_MERGE_PATCH(@json1,@json2) | JSON_MERGE_PRESERVE(@json1,@json2) |
+---------------------------------+------------------------------------+
| [2, 3] | [1, 2, 2, 3] |
+---------------------------------+------------------------------------+
在其中添加“ none”的值存在。怎么样?
还有其他功能吗?
最佳答案
JSON_MERGE_PATCH
上的MariaDB's documentation描述性不强,因为它只是指出:
JSON_MERGE_PATCH是JSON_MERGE的RFC 7396兼容替代品
但是,MySQL documentation解释得很好:
对两个或多个JSON文档执行符合RFC 7396的合并,并返回合并的结果,而不会保留具有重复密钥的成员。
JSON_MERGE_PATCH()执行合并,如下所示:
一种。如果第一个参数不是对象,则合并的结果为
就像一个空对象已与第二个对象合并一样
论点。
b。如果第二个参数不是对象,则合并的结果
是第二个参数。
现在,根据您的情况,您尝试合并两个JSON数组,但不合并对象。因此,按照上面的b点,合并的结果是第二个参数,因此您将获得第二个数组,即[2, 3]
。
另一方面,JSON_MERGE_PRESERVE
的Documentation指出以下内容:
合并两个或多个JSON文档并返回合并的结果。
合并根据以下规则进行。
相邻数组合并为单个数组。
这就是为什么当您使用JSON_MERGE_PRESERVE
时,会将两个参数(数组)合并到一个数组中,即[1, 2, 2, 3]