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

Cách lấy các phần tử duy nhất / khác biệt bên trong mảng JSON trong MySQL 5.7

Không có phương pháp trực tiếp nào để lấy các giá trị riêng biệt từ một mảng JSON trong MySQL. Một phương pháp có thể là sử dụng khái niệm bảng Trình tạo chuỗi / Số . Bảng tuần tự này có thể được sử dụng làm Bảng gốc (truy vấn con) hoặc bạn có thể tạo một bảng vĩnh viễn lưu trữ các số trong cơ sở dữ liệu của mình.

Sau đó, chúng tôi sẽ sử dụng bảng trình tự này để JSON_EXTRACT() giá trị ra khỏi mảng ở khóa đầu tiên, khóa thứ hai, khóa thứ ba, v.v. Khi chúng tôi đã trích xuất các giá trị trong hàng riêng biệt, chúng tôi có thể chỉ cần sử dụng DISTINCT để có được những giá trị độc đáo từ chúng. Sau đó, chúng tôi có thể sử dụng JSON_ARRAYAGG() chức năng tổng hợp lại các giá trị duy nhất này trở lại dưới dạng một mảng JSON.

Giản đồ (MySQL v5.7)

SET @json = '["a", "b", "b", "a", "c"]';

Truy vấn

SELECT Json_arrayagg(dt.val) AS unq_json_array
FROM   (SELECT DISTINCT Json_extract(@json, Concat('$[', seq.n, ']')) AS val
        FROM   (SELECT 0 AS n UNION ALL SELECT 1 UNION ALL
                SELECT 2 UNION ALL SELECT 3 UNION ALL 
                SELECT 4 UNION ALL SELECT 5 UNION ALL
                SELECT 6 UNION ALL SELECT 7 UNION ALL
                SELECT 8 UNION ALL SELECT 9) AS seq) AS dt
WHERE  dt.val IS NOT NULL;

Kết quả

| unq_json_array  |
| --------------- |
| ["a", "b", "c"] |

Xem trên DB Fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL INNER JOIN chỉ chọn một hàng từ bảng thứ hai

  2. Nhận vị trí hàng trong truy vấn MYSQL

  3. cách đặt lại mật khẩu mysql của tôi trong mac os 10.13.3

  4. Trong PHP với PDO, làm thế nào để kiểm tra truy vấn tham số SQL cuối cùng?

  5. kết nối cận âm 2 trên nhiều cột