Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

JSON_MERGE_PATCH() vs JSON_MERGE_PRESERVE() di MySQL:Apa Bedanya?

MySQL menyertakan sejumlah fungsi untuk bekerja dengan dokumen JSON. Di antaranya adalah JSON_MERGE_PATCH() dan JSON_MERGE_PRESERVE() fungsi.

Kedua fungsi ini menggabungkan dua atau lebih dokumen JSON dan mengembalikan hasilnya. Namun, ada kasus tertentu di mana fungsi ini akan mengembalikan hasil yang berbeda. Anda harus mengetahui hal ini sebelum memasukkannya ke dalam kueri Anda.

Sintaks

Pertama, inilah sintaks untuk setiap fungsi:

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

Dimana json_doc adalah dokumen JSON yang akan digabungkan.

Jadi kedua fungsi menerima dua atau lebih argumen, masing-masing mewakili dokumen JSON yang akan digabungkan.

Perbedaan

Kedua fungsi bekerja persis sama, dengan dua pengecualian berikut:

  • JSON_MERGE_PATCH() menghapus setiap anggota di objek pertama dengan kunci yang cocok di objek kedua, asalkan nilai yang terkait dengan kunci di objek kedua bukan JSON null.
  • Jika objek kedua memiliki anggota dengan kunci yang cocok dengan anggota di objek pertama, JSON_MERGE_PATCH() menggantikan nilai pada objek pertama dengan nilai pada objek kedua, sedangkan JSON_MERGE_PRESERVE() menambahkan nilai kedua ke nilai pertama.

Jadi pada dasarnya, mereka berbeda dalam cara menangani kunci duplikat.

Contoh

Berikut adalah contoh untuk menunjukkan perbedaan antara kedua fungsi ini.

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

Hasil:

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

Kita dapat melihat bahwa JSON_MERGE_PATCH() menggantikan nilai objek pertama (Bartholomew ) dengan nilai objek kedua (Bart ).

JSON_MERGE_PRESERVE() di sisi lain, membuat array dan mengisinya dengan kedua nilai.

Contoh 2 – Array

Berikut ini contoh menggabungkan dua array dengan nama yang sama:

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

Hasil:

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

Jadi dalam hal ini, JSON_MERGE_PATCH() telah mengganti semua elemen di larik pertama dengan elemen di larik kedua.

JSON_MERGE_PRESERVE() baru saja menggabungkan nilai dari kedua array menjadi satu.

Jelas, jika array memiliki nama yang berbeda, mereka akan berakhir sebagai array terpisah (tetapi dalam dokumen JSON yang sama). Jadi dalam kasus seperti itu, kedua fungsi akan mengembalikan hasil yang sama.

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

Hasil:

+------------------------------------------------------------------+
| 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. Rails 3 ActiveRecord:Pesan berdasarkan jumlah asosiasi

  2. Perbedaan antara SELECT INTO dan INSERT INTO di MySQL

  3. Tidak semua parameter digunakan dalam pernyataan SQL (Python, MySQL)

  4. Mengapa MYSQL LIMIT offset yang lebih tinggi memperlambat kueri?

  5. Bagaimana saya bisa menggabungkan dua tabel MySQL?