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

JSON_MERGE_PRESERVE() – Обединяване на множество JSON документи в MySQL

В MySQL, JSON_MERGE_PRESERVE() функцията обединява два или повече JSON документа и връща резултата.

Вие предоставяте JSON документите като аргументи.

Тази функция беше добавена в MySQL 8.0.3 като синоним на JSON_MERGE() , обаче, JSON_MERGE() функцията вече е остаряла и подлежи на премахване в бъдеща версия на MySQL.

Синтаксис

Синтаксисът е така:

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

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

Ако някой от документите е невалиден, възниква грешка.

Ако някой аргумент е NULL , тази функция връща NULL .

Пример 1 – Основна употреба

Ето пример за демонстрация.

SELECT JSON_MERGE_PRESERVE('{"Име":"Омир"}', '{"Възраст":39}') Резултат;

Резултат:

+------------------------------+| Резултат |+------------------------------+| {"Възраст":39, "Име":"Омир"} |+------------------------------+ 

Така че в този пример обединихме два отделни обекта в един обект.

Това е точно същия резултат, който бихме получили, ако използвахме JSON_MERGE_PATCH() функция. Въпреки това, ако се опитаме да обединим дублирани ключове, тези две функции ще дадат различни резултати.

Пример 2 – Дублирани ключове

Както подсказва името, JSON_MERGE_PRESERVE() функцията запазва членове с дублиращи се ключове (това е мястото, където се различава от JSON_MERGE_PATCH() функция).

SELECT JSON_MERGE_PRESERVE('{"Име":"Вартоломей"}', '{"Име":"Барт"}') Резултат;

Резултат:

+---------------------------------+| Резултат |+----------------------------------+| {"Име":["Вартоломей", "Барт"]} |+-------------------------------- --+

Така че в този случай беше създаден масив и както Барт, така и Бартоломей бяха добавени като отделни елементи от този масив.

Това е в контраст с JSON_MERGE_PATCH() функция, която прави следното:

SELECT JSON_MERGE_PATCH('{"Име":"Вартоломей"}', '{"Име":"Барт"}') Резултат;

Резултат:

+-----------------+| Резултат |+------------------+| {"Име":"Барт"} |+-----------------+

Пример 3 – Множество членове

Ето още един пример, но с допълнителен член в обекта:

SELECT JSON_MERGE_PRESERVE('{"Име":"Вартоломей", "Възраст":10}', '{"Име":"Барт"}') Резултат;

Резултат:

+------------------------------------------------------- +| Резултат |+------------------------------------------------+ | {"Възраст":10, "Име":["Вартоломей", "Барт"]} |+-------------------------- -------------------+

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

SELECT JSON_MERGE_PRESERVE('{"Име":"Вартоломей"}', '{"Име":"Барт", "Възраст":10}') Резултат;

Резултат:

+------------------------------------------------------- +| Резултат |+------------------------------------------------+ | {"Възраст":10, "Име":["Вартоломей", "Барт"]} |+-------------------------- -------------------+

Пример 4 – Още документи

Не сте ограничени до сливане само на два документа. Можете да обедините колкото е необходимо. Ето пример за обединяване на три обекта.

SELECT JSON_MERGE_PRESERVE('{"Име":"Барт"}', '{"Възраст":10}', '{"Цвят на косата":"Жълт"}') Резултат;

Резултат:

+------------------------------------------------------- -------+| Резултат |+-------------------------------------------------------- ------+| {"Възраст":10, "Име":"Барт", "Цвят на косата":"Жълт"} |+------------------------ -----------------------------+

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

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

SELECT JSON_MERGE_PRESERVE('{"Хобита":["Trouble", "Mischief"]}', '{"Хобита":["Skateboarding"]}') Резултат;

Резултат:

+------------------------------------------------------- ---------+| Резултат |+-------------------------------------------------------- --------+| {"Хобита":["Проблеми", "Пакости", "Скейтборд"]} |+---------------------------- ----------------------------------+

Това е друг пример, където JSON_MERGE_PATCH() ще върне различен резултат.

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

SELECT JSON_MERGE_PRESERVE('{"Хобита":["Trouble", "Mischief"]}', '{"Хоби":["Skateboarding"]}') Резултат;

Резултат:

+------------------------------------------------------- --------------------+| Резултат |+-------------------------------------------------------- -------------------+| {"Хоби":["Скейтборд"], "Хобита":["Проблеми", "Пакости"]} |+----------------------- -------------------------------------------+

Пример 6 – По-голям JSON документ

Ето пример, който обединява (малко) по-големи JSON документи.

SET @data1 ='{ "Подозрения":{ "Име":"Барт", "Хобита":["Скейтборд", "Пакости"] } }', @data2 ='{ "Подозрения":{ " Възраст“:10, „Родители“:[„Мардж“, „Хомър“], „Хобита“:[„Проблеми“] } }';ИЗБЕРЕТЕ JSON_MERGE_PRESERVE(@data1, @data2) Резултат;

Резултат:

+------------------------------------------------------- -------------------------------------------------- ------------------------------+| Резултат |+-------------------------------------------------------- -------------------------------------------------- ----------------------------+| {"Sospect":{"Age":10, "Name":"Bart", "Hobbites":["Skateboarding", "Mischief", "Trouble"], "Parents":["Marge", "Homer" ]}} |+----------------------------------------------- -------------------------------------------------- -------------------------------+

За точните правила за това как тази функция извършва сливания, вижте документацията на MySQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какъв е максималният размер на заявката за mysql?

  2. Определете ранг въз основа на множество колони в MySQL

  3. PHP фатална грешка:Клас 'PDO' не е намерен

  4. Mysql:Настройте формата на DATETIME на „ДД-ММ-ГГГГ ЧЧ:ММ:СС“, когато създавате таблица

  5. Използване на MySQL тригери