sql >> Databasteknik >  >> RDS >> Mysql

JSON_MERGE_PATCH() vs JSON_MERGE_PRESERVE() i MySQL:Vad är skillnaden?

MySQL inkluderar ett antal funktioner för att arbeta med JSON-dokument. Bland dessa finns JSON_MERGE_PATCH() och JSON_MERGE_PRESERVE() funktioner.

Båda dessa funktioner slår samman två eller flera JSON-dokument och returnerar resultatet. Det finns dock vissa fall där dessa funktioner ger ett annat resultat. Du måste vara medveten om detta innan du inkluderar dem i någon av dina frågor.

Syntax

Först, här är syntaxen för varje funktion:

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

Där json_doc är JSON-dokumenten som ska slås samman.

Så båda funktionerna accepterar två eller flera argument, som var och en representerar de JSON-dokument som ska slås samman.

Skillnaden

Båda funktionerna fungerar exakt likadant, med följande två undantag:

  • JSON_MERGE_PATCH() tar bort alla medlemmar i det första objektet med en matchande nyckel i det andra objektet, förutsatt att värdet som är associerat med nyckeln i det andra objektet inte är JSON null.
  • Om det andra objektet har en medlem med en nyckel som matchar en medlem i det första objektet, JSON_MERGE_PATCH() ersätter värdet i det första objektet med värdet i det andra objektet, medan JSON_MERGE_PRESERVE() lägger till det andra värdet till det första värdet.

Så i grund och botten skiljer de sig åt i hur de hanterar dubbletter av nycklar.

Exempel

Här är ett exempel för att visa skillnaden mellan dessa två funktioner.

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

Resultat:

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

Vi kan se att JSON_MERGE_PATCH() ersatte det första objektets värde (Bartholomew ) med det andra objektvärdet (Bart ).

JSON_MERGE_PRESERVE() å andra sidan skapade en array och fyllde den med båda värdena.

Exempel 2 – Arrayer

Här är ett exempel på att slå samman två arrayer med samma namn:

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

Resultat:

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

Så i det här fallet, JSON_MERGE_PATCH() har ersatt alla element i den första arrayen med elementet i den andra arrayen.

JSON_MERGE_PRESERVE() har helt enkelt kombinerat värdena för båda arrayerna till en.

Uppenbarligen, om arrayerna har olika namn, kommer de att sluta som separata arrayer (men inom samma JSON-dokument). Så i sådana fall kommer båda funktionerna att returnera samma resultat.

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

Resultat:

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

  1. Använda fönsterfunktioner i en uppdateringssats

  2. Hur SPACE()-funktionen fungerar i SQL Server (T-SQL)

  3. Implementering av fulltextsökning i SQL Server 2016 för avancerade användare

  4. Barkers notation