Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

JSON_MERGE_PRESERVE () - Hợp nhất nhiều tài liệu JSON trong MySQL

Trong MySQL, JSON_MERGE_PRESERVE() hàm hợp nhất hai hoặc nhiều tài liệu JSON và trả về kết quả.

Bạn cung cấp các tài liệu JSON dưới dạng đối số.

Hàm này đã được thêm vào MySQL 8.0.3 dưới dạng từ đồng nghĩa với JSON_MERGE() , tuy nhiên, JSON_MERGE() hàm hiện không được dùng nữa và có thể bị xóa trong bản phát hành MySQL trong tương lai.

Cú pháp

Cú pháp như sau:

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

Ở đâu json_doc là các tài liệu JSON sẽ được hợp nhất.

Nếu bất kỳ tài liệu nào không hợp lệ, lỗi sẽ xảy ra.

Nếu bất kỳ đối số nào là NULL , hàm này trả về NULL .

Ví dụ 1 - Cách sử dụng cơ bản

Đây là một ví dụ để chứng minh.

 SELECT JSON_MERGE_PRESERVE ('{"Name":"Homer"}', '{"Age":39}') Kết quả; 

Kết quả:

 + ------------------------------ + | Kết quả | + ------------------------------ + | {"Tuổi":39, "Tên":"Homer"} | + ------------------------------ +  

Vì vậy, trong ví dụ này, chúng tôi đã hợp nhất hai đối tượng riêng biệt thành một đối tượng.

Đây chính xác là kết quả mà chúng tôi nhận được nếu sử dụng JSON_MERGE_PATCH() hàm số. Tuy nhiên, nếu chúng tôi cố gắng hợp nhất các khóa trùng lặp, hai hàm này sẽ tạo ra các kết quả khác nhau.

Ví dụ 2 - Các khóa trùng lặp

Như tên cho thấy, JSON_MERGE_PRESERVE() hàm bảo toàn các thành viên có khóa trùng lặp (đây là nơi nó khác với JSON_MERGE_PATCH() chức năng).

 SELECT JSON_MERGE_PRESERVE ('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Kết quả; 

Kết quả:

 + ----------------------------------- + | Kết quả | + ----------------------------------- + | {"Tên":["Bartholomew", "Bart"]} | + -------------------------------------------------- - + 

Vì vậy, trong trường hợp này, một mảng đã được tạo và cả Bart và Bartholomew đều được thêm vào dưới dạng các phần tử riêng biệt của mảng đó.

Điều này trái ngược với JSON_MERGE_PATCH() chức năng này thực hiện những việc sau:

 SELECT JSON_MERGE_PATCH ('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Kết quả; 

Kết quả:

 + ------------------ + | Kết quả | + ------------------ + | {"Tên":"Bart"} | + ------------------ + 

Ví dụ 3 - Nhiều thành viên

Đây là một ví dụ khác, nhưng có thêm một thành viên trong đối tượng:

 SELECT JSON_MERGE_PRESERVE ('{"Name":"Bartholomew", "Age":10}', '{"Name":"Bart"}') Kết quả; 

Kết quả:

 + ---------------------------------------------- + | Kết quả | + ---------------------------------------------- + | {"Tuổi":10, "Tên":["Bartholomew", "Bart"]} | + --------------------------- ------------------- + 

Điều này cũng hoạt động theo chiều ngược lại - kết quả cũng giống như vậy nếu chúng ta thêm thành viên bổ sung vào đối tượng thứ hai.

 SELECT JSON_MERGE_PRESERVE ('{"Name":"Bartholomew"}', '{"Name":"Bart", "Age":10}') Kết quả; 

Kết quả:

 + ---------------------------------------------- + | Kết quả | + ---------------------------------------------- + | {"Tuổi":10, "Tên":["Bartholomew", "Bart"]} | + --------------------------- ------------------- + 

Ví dụ 4 - Tài liệu khác

Bạn không bị giới hạn khi chỉ hợp nhất hai tài liệu. Bạn có thể hợp nhất nhiều cái nếu cần. Dưới đây là một ví dụ về hợp nhất ba đối tượng.

 SELECT JSON_MERGE_PRESERVE ('{"Name":"Bart"}', '{"Age":10}', '{"Hair Color":"Yellow"}') Kết quả; 

Kết quả:

 + ---------------------------------------------- ------- + | Kết quả | + ----------------------------------------------- ------ + | {"Tuổi":10, "Tên":"Bart", "Màu tóc":"Vàng"} | + ------------------------ ----------------------------- + 

Ví dụ 5 - Mảng

Dưới đây là một ví dụ về việc hợp nhất hai mảng có cùng tên:

 SELECT JSON_MERGE_PRESERVE ('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboarding"]}') Kết quả; 

Kết quả:

 + ---------------------------------------------- --------- + | Kết quả | + ----------------------------------------------- -------- + | {"Sở thích":["Rắc rối", "Nghịch ngợm", "Trượt ván"]} | + ----------------------------- -------------------------- + 

Đây là một ví dụ khác trong đó JSON_MERGE_PATCH() sẽ trả về một kết quả khác.

Rõ ràng, nếu các mảng có tên khác nhau, chúng sẽ kết thúc dưới dạng các mảng riêng biệt (nhưng trong cùng một tài liệu JSON):

 SELECT JSON_MERGE_PRESERVE ('{"Sở thích":["Rắc rối", "Nghịch ngợm"]}', '{"Sở thích":["Trượt ván"]}') Kết quả; 

Kết quả:

 + ---------------------------------------------- -------------------- + | Kết quả | + ----------------------------------------------- ------------------- + | {"Sở thích":["Trượt ván"], "Sở thích":["Rắc rối", "Nghịch ngợm"]} | + ----------------------- ------------------------------------------- + 

Ví dụ 6 - Tài liệu JSON lớn hơn

Dưới đây là một ví dụ hợp nhất các tài liệu JSON lớn hơn (một chút).

 SET @ data1 ='{"Nghi phạm":{"Tên":"Bart", "Sở thích":["Trượt ván", "Nghịch ngợm"]}}', @ data2 ='{"Nghi phạm":{" Tuổi ":10," Cha mẹ ":[" Marge "," Homer "]," Sở thích ":[" Rắc rối "]}} '; CHỌN JSON_MERGE_PRESERVE (@ data1, @ data2) Kết quả; 

Kết quả:

 + ---------------------------------------------- -------------------------------------------------- ------------------------------ + | Kết quả | + ----------------------------------------------- -------------------------------------------------- ----------------------------- + | {"Nghi phạm":{"Tuổi":10, "Tên":"Bart", "Sở thích":["Trượt ván", "Nghịch ngợm", "Rắc rối"], "Cha mẹ":["Marge", "Homer" ]}} | + --------------------------------------------- -------------------------------------------------- ------------------------------- + 

Để biết các quy tắc chính xác về cách hàm này thực hiện hợp nhất, hãy xem tài liệu 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. Chiến lược sao lưu và phục hồi MySQL / MariaDB thành công

  2. Định dạng ngày chèn mysql PHP

  3. Truy vấn MySQL để có được các sản phẩm bán chạy nhất

  4. Tự động tăng sau khi xóa trong MySQL

  5. 60 triệu mục nhập, chọn mục nhập từ một tháng nhất định. Làm thế nào để tối ưu hóa cơ sở dữ liệu?