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

JSON_MERGE_PATCH () so với JSON_MERGE_PRESERVE () trong MySQL:Sự khác biệt là gì?

MySQL bao gồm một số hàm để làm việc với các tài liệu JSON. Trong số này có JSON_MERGE_PATCH()JSON_MERGE_PRESERVE() các chức năng.

Cả hai hàm này hợp nhất hai hoặc nhiều tài liệu JSON và trả về kết quả. Tuy nhiên, có một số trường hợp các hàm này sẽ trả về một kết quả khác. Bạn cần biết điều này trước khi đưa chúng vào bất kỳ truy vấn nào của mình.

Cú pháp

Đầu tiên, đây là cú pháp cho từng hàm:

JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)
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.

Vì vậy, cả hai hàm đều chấp nhận hai hoặc nhiều đối số, mỗi đối số đại diện cho các tài liệu JSON sẽ được hợp nhất.

Sự khác biệt

Cả hai chức năng hoạt động hoàn toàn giống nhau, với hai ngoại lệ sau:

  • JSON_MERGE_PATCH() xóa bất kỳ thành viên nào trong đối tượng đầu tiên bằng khóa phù hợp trong đối tượng thứ hai, miễn là giá trị được liên kết với khóa trong đối tượng thứ hai không phải là JSON rỗng.
  • Nếu đối tượng thứ hai có một thành viên có khóa khớp với một thành viên trong đối tượng đầu tiên, JSON_MERGE_PATCH() thay thế giá trị trong đối tượng đầu tiên bằng giá trị trong đối tượng thứ hai, trong khi JSON_MERGE_PRESERVE() nối giá trị thứ hai với giá trị đầu tiên.

Vì vậy, về cơ bản, chúng khác nhau về cách xử lý các khóa trùng lặp.

Ví dụ

Dưới đây là một ví dụ để chứng minh sự khác biệt giữa hai chức năng này.

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

Kết quả:

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

Chúng ta có thể thấy rằng JSON_MERGE_PATCH() đã thay thế giá trị của đối tượng đầu tiên (Bartholomew ) với giá trị đối tượng thứ hai (Bart ).

JSON_MERGE_PRESERVE() mặt khác, đã tạo một mảng và điền nó bằng cả hai giá trị.

Ví dụ 2 - 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_PATCH('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') JSON_MERGE_PATCH,
  JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') JSON_MERGE_PRESERVE;

Kết quả:

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

Vì vậy, trong trường hợp này, JSON_MERGE_PATCH() đã thay thế tất cả các phần tử trong mảng đầu tiên bằng phần tử trong mảng thứ hai.

JSON_MERGE_PRESERVE() chỉ đơn giản là kết hợp các giá trị của cả hai mảng thành một.

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). Vì vậy, trong những trường hợp như vậy, cả hai hàm sẽ trả về cùng một kết quả.

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

Kết quả:

+------------------------------------------------------------------+
| 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. Làm cách nào để thêm cột mới vào bảng MYSQL?

  2. Cách CHÈN nếu hàng không tồn tại (UPSERT) trong MySQL

  3. MySQL INSERT hoặc REPLACE Commands

  4. Cài đặt mysql-python (Windows)

  5. Sử dụng bộ nhớ tối đa MySQL