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

JSON_MERGE_PATCH() vs JSON_MERGE_PRESERVE() w MySQL:jaka jest różnica?

MySQL zawiera szereg funkcji do pracy z dokumentami JSON. Wśród nich są JSON_MERGE_PATCH() i JSON_MERGE_PRESERVE() funkcje.

Obie te funkcje łączą co najmniej dwa dokumenty JSON i zwracają wynik. Jednak są pewne przypadki, w których te funkcje zwrócą inny wynik. Musisz być tego świadomy, zanim włączysz je do swoich zapytań.

Składnia

Po pierwsze, oto składnia dla każdej funkcji:

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

Gdzie json_doc czy dokumenty JSON mają zostać scalone.

Tak więc obie funkcje akceptują dwa lub więcej argumentów, z których każdy reprezentuje dokumenty JSON, które mają zostać scalone.

Różnica

Obie funkcje działają dokładnie tak samo, z dwoma wyjątkami:

  • JSON_MERGE_PATCH() usuwa dowolny element członkowski w pierwszym obiekcie z pasującym kluczem w drugim obiekcie, pod warunkiem, że wartość skojarzona z kluczem w drugim obiekcie nie ma wartości JSON null.
  • Jeśli drugi obiekt ma element z kluczem pasującym do elementu w pierwszym obiekcie, JSON_MERGE_PATCH() zastępuje wartość w pierwszym obiekcie wartością w drugim obiekcie, natomiast JSON_MERGE_PRESERVE() dołącza drugą wartość do pierwszej wartości.

Zasadniczo różnią się więc sposobem obsługi zduplikowanych kluczy.

Przykład

Oto przykład pokazujący różnicę między tymi dwiema funkcjami.

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

Wynik:

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

Widzimy, że JSON_MERGE_PATCH() zastąpiono wartość pierwszego obiektu (Bartholomew ) z drugą wartością obiektów (Bart ).

JSON_MERGE_PRESERVE() z drugiej strony utworzył tablicę i wypełnił ją obiema wartościami.

Przykład 2 – Tablice

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

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

Wynik:

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

W tym przypadku JSON_MERGE_PATCH() zamienił wszystkie elementy w pierwszej tablicy na element z drugiej tablicy.

JSON_MERGE_PRESERVE() po prostu połączył wartości obu tablic w jedną.

Oczywiście, jeśli tablice mają różne nazwy, skończą jako oddzielne tablice (ale w tym samym dokumencie JSON). W takich przypadkach obie funkcje zwrócą ten sam wynik.

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

Wynik:

+------------------------------------------------------------------+
| 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. Jak mogę włączyć rozszerzenie MySQLi w PHP 7?

  2. wyświetlaj dane z bazy danych SQL do tabeli php/html

  3. Jak wstawić wiele wierszy w MySQL

  4. Jak poprawnie używać CASE..WHEN w MySQL?

  5. Wstaw MySQL do z jednej bazy danych w innej