来自的示例:

我希望结果是:

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_PRESERVEDocumentation指出以下内容:


  合并两个或多个JSON文档并返回合并的结果。
  
  合并根据以下规则进行。
  
  
  相邻数组合并为单个数组。
  


这就是为什么当您使用JSON_MERGE_PRESERVE时,会将两个参数(数组)合并到一个数组中,即[1, 2, 2, 3]

07-25 22:33