Mysql
 sql >> Baza danych >  >> RDS >> Mysql

JSON_MERGE_PRESERVE() – Scal wiele dokumentów JSON w MySQL

W MySQL JSON_MERGE_PRESERVE() funkcja łączy dwa lub więcej dokumentów JSON i zwraca wynik.

Podajesz dokumenty JSON jako argumenty.

Ta funkcja została dodana w MySQL 8.0.3 jako synonim JSON_MERGE() , jednak JSON_MERGE() funkcja jest teraz przestarzała i może zostać usunięta w przyszłej wersji MySQL.

Składnia

Składnia wygląda tak:

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

Gdzie json_doc czy dokumenty JSON mają zostać scalone.

Jeśli którykolwiek z dokumentów jest nieprawidłowy, zgłaszany jest błąd.

Jeśli jakikolwiek argument ma wartość NULL , ta funkcja zwraca NULL .

Przykład 1 – Podstawowe użycie

Oto przykład do zademonstrowania.

SELECT JSON_MERGE_PRESERVE('{"Name": "Homer"}', '{"Age": 39}') Result;

Wynik:

+------------------------------+
| Result                       |
+------------------------------+
| {"Age": 39, "Name": "Homer"} |
+------------------------------+

W tym przykładzie połączyliśmy dwa oddzielne obiekty w jeden.

Jest to dokładnie ten sam wynik, który otrzymalibyśmy, gdybyśmy użyli JSON_MERGE_PATCH() funkcjonować. Jeśli jednak spróbujemy połączyć zduplikowane klucze, te dwie funkcje dadzą różne wyniki.

Przykład 2 – Zduplikowane klawisze

Jak sama nazwa wskazuje, JSON_MERGE_PRESERVE() funkcja zachowuje członków ze zduplikowanymi kluczami (tutaj różni się od JSON_MERGE_PATCH() funkcja).

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

Wynik:

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

Tak więc w tym przypadku utworzono tablicę i zarówno Bart, jak i Bartholomew zostali dodani jako oddzielne elementy tej tablicy.

Jest to w przeciwieństwie do JSON_MERGE_PATCH() funkcja, która wykonuje następujące czynności:

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

Wynik:

+------------------+
| Result           |
+------------------+
| {"Name": "Bart"} |
+------------------+

Przykład 3 – Wielu członków

Oto kolejny przykład, ale z dodatkowym elementem w obiekcie:

SELECT 
  JSON_MERGE_PRESERVE('{"Name": "Bartholomew", "Age": 10}', '{"Name": "Bart"}') Result;

Wynik:

+----------------------------------------------+
| Result                                       |
+----------------------------------------------+
| {"Age": 10, "Name": ["Bartholomew", "Bart"]} |
+----------------------------------------------+

Działa to również w drugą stronę – wynik jest taki sam, jeśli dodamy dodatkowy element do drugiego obiektu.

SELECT 
  JSON_MERGE_PRESERVE('{"Name": "Bartholomew"}', '{"Name": "Bart", "Age": 10}') Result;

Wynik:

+----------------------------------------------+
| Result                                       |
+----------------------------------------------+
| {"Age": 10, "Name": ["Bartholomew", "Bart"]} |
+----------------------------------------------+

Przykład 4 – Więcej dokumentów

Nie jesteś ograniczony do połączenia tylko dwóch dokumentów. Możesz połączyć tyle, ile potrzebujesz. Oto przykład scalania trzech obiektów.

SELECT 
  JSON_MERGE_PRESERVE('{"Name": "Bart"}', '{"Age": 10}', '{"Hair Color": "Yellow"}') Result;

Wynik:

+-----------------------------------------------------+
| Result                                              |
+-----------------------------------------------------+
| {"Age": 10, "Name": "Bart", "Hair Color": "Yellow"} |
+-----------------------------------------------------+

Przykład 5 – Tablice

Oto przykład połączenia dwóch tablic o tej samej nazwie:

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

Wynik:

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

To kolejny przykład, w którym JSON_MERGE_PATCH() zwróci inny wynik.

Oczywiście, jeśli tablice mają różne nazwy, skończą jako oddzielne tablice (ale w tym samym dokumencie JSON):

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

Wynik:

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

Przykład 6 – Większy dokument JSON

Oto przykład, który łączy (nieco) większe dokumenty JSON.

SET @data1 = '{  
    "Suspect": {    
       "Name": "Bart", 
       "Hobbies": ["Skateboarding", "Mischief"]  
    }
 }',
 @data2 = '{  
    "Suspect": {    
       "Age": 10, 
       "Parents": ["Marge", "Homer"],
       "Hobbies": ["Trouble"]  
    }
 }';
SELECT JSON_MERGE_PRESERVE(@data1, @data2) Result;

Wynik:

+------------------------------------------------------------------------------------------------------------------------------+
| Result                                                                                                                       |
+------------------------------------------------------------------------------------------------------------------------------+
| {"Suspect": {"Age": 10, "Name": "Bart", "Hobbies": ["Skateboarding", "Mischief", "Trouble"], "Parents": ["Marge", "Homer"]}} |
+------------------------------------------------------------------------------------------------------------------------------+

Dokładne zasady wykonywania połączeń przez tę funkcję można znaleźć w dokumentacji 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. KOLUMNA UPUSZCZANIA MySQL

  2. Jak zresetować hasło roota mysql?

  3. Policz wystąpienia DISTINCT wartości

  4. SQL SELECT, aby uzyskać pierwsze N ​​dodatnich liczb całkowitych

  5. Jak wyodrębnić podciąg z ciągu w PostgreSQL/MySQL?