Mysql
 sql >> база данни >  >> RDS >> Mysql

JSON_MERGE_PATCH() срещу JSON_MERGE_PRESERVE() в MySQL:Каква е разликата?

MySQL включва редица функции за работа с JSON документи. Сред тях са JSON_MERGE_PATCH() и JSON_MERGE_PRESERVE() функции.

И двете от тези функции обединяват два или повече JSON документа и връщат резултата. Въпреки това, има определени случаи, когато тези функции ще върнат различен резултат. Трябва да сте наясно с това, преди да ги включите в някоя от вашите заявки.

Синтаксис

Първо, ето синтаксиса за всяка функция:

JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)
JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)

Където json_doc са JSON документите, които ще бъдат обединени.

Така че и двете функции приемат два или повече аргумента, всеки от които представлява JSON документите, които трябва да бъдат обединени.

Разликата

И двете функции работят абсолютно еднакво, със следните две изключения:

  • JSON_MERGE_PATCH() премахва всеки член в първия обект със съвпадащ ключ във втория обект, при условие че стойността, свързана с ключа във втория обект, не е JSON null.
  • Ако вторият обект има член с ключ, съответстващ на член в първия обект, JSON_MERGE_PATCH() замества стойността в първия обект със стойността във втория обект, докато JSON_MERGE_PRESERVE() добавя втората стойност към първата стойност.

Така че по същество те се различават по начина, по който боравят с дублирани ключове.

Пример

Ето пример за демонстриране на разликата между тези две функции.

SELECT 
  JSON_MERGE_PATCH('{"Name": "Bartholomew"}', '{"Name": "Bart"}') JSON_MERGE_PATCH,
  JSON_MERGE_PRESERVE('{"Name": "Bartholomew"}', '{"Name": "Bart"}') JSON_MERGE_PRESERVE;

Резултат:

+------------------+-----------------------------------+
| JSON_MERGE_PATCH | JSON_MERGE_PRESERVE               |
+------------------+-----------------------------------+
| {"Name": "Bart"} | {"Name": ["Bartholomew", "Bart"]} |
+------------------+-----------------------------------+

Можем да видим, че JSON_MERGE_PATCH() замени стойността на първия обект (Bartholomew ) със стойността на втория обект (Bart ).

JSON_MERGE_PRESERVE() от друга страна, създаде масив и го попълни с двете стойности.

Пример 2 – Масиви

Ето пример за сливане на два масива с едно и също име:

SELECT 
  JSON_MERGE_PATCH('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') JSON_MERGE_PATCH,
  JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') JSON_MERGE_PRESERVE;

Резултат:

+--------------------------------+-------------------------------------------------------+
| JSON_MERGE_PATCH               | JSON_MERGE_PRESERVE                                   |
+--------------------------------+-------------------------------------------------------+
| {"Hobbies": ["Skateboarding"]} | {"Hobbies": ["Trouble", "Mischief", "Skateboarding"]} |
+--------------------------------+-------------------------------------------------------+

Така че в този случай JSON_MERGE_PATCH() е заменил всички елементи в първия масив с елемента във втория масив.

JSON_MERGE_PRESERVE() просто комбинира стойностите на двата масива в един.

Очевидно, ако масивите имат различни имена, те ще се окажат като отделни масиви (но в един и същ JSON документ). Така че в такива случаи и двете функции ще върнат един и същ резултат.

SELECT 
  JSON_MERGE_PATCH('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobby": ["Skateboarding"]}') AS Result
UNION ALL
SELECT 
  JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobby": ["Skateboarding"]}');

Резултат:

+------------------------------------------------------------------+
| Result                                                           |
+------------------------------------------------------------------+
| {"Hobby": ["Skateboarding"], "Hobbies": ["Trouble", "Mischief"]} |
| {"Hobby": ["Skateboarding"], "Hobbies": ["Trouble", "Mischief"]} |
+------------------------------------------------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Активирайте Python за свързване с MySQL чрез SSH тунелиране

  2. LAST_DAY() Примери – MySQL

  3. Каква е разликата между обединения, разделени със запетая, и присъединяване по синтаксис в MySQL?

  4. Adminer – Разширен уеб базиран инструмент за администриране на бази данни за Linux

  5. MySQL 1062 - Дублиран запис "0" за ключ "PRIMARY"