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

Nhận các giá trị khác biệt từ mảng MySQL JSON

Xin lỗi vì tính năng cân bằng điện tử, nhưng tôi đã gặp phải vấn đề tương tự. Giải pháp là:JSON_TABLE() có sẵn kể từ MySQL 8.0.

Đầu tiên, hợp nhất các mảng trong hàng thành mảng đơn một hàng.

select concat('[',         -- start wrapping single array with opening bracket
    replace(
        replace(
            group_concat(vals),  -- group_concat arrays from rows
            ']', ''),            -- remove their opening brackets
        '[', ''),              -- remove their closing brackets
    ']') as json             -- finish wraping single array with closing bracket
from (
  select '[801, 751, 603, 753, 803]' as vals
  union select '[801, 751]'
  union select '[578, 66, 15]'
) as jsons;

# gives: [801, 751, 603, 753, 803, 801, 751, 578, 66, 15]

Thứ hai, sử dụng json_table để chuyển mảng thành hàng.

select val
from (
    select concat('[',
        replace(
            replace(
                group_concat(vals),
                ']', ''),
            '[', ''),
        ']') as json
    from (
      select '[801, 751, 603, 753, 803]' as vals
      union select '[801, 751]'
      union select '[578, 66, 15]'
    ) as jsons
) as merged
join json_table(
    merged.json,
    '$[*]' columns (val int path '$')
) as jt
group by val;

# gives...
801
751
603
753
803
578
66
15

Xem https:// dev. mysql.com/doc/refman/8.0/en/json-table-functions.html#osystem_json-table

Lưu ý nhóm group by val để nhận các giá trị khác biệt. Bạn cũng có thể order họ và mọi thứ ...

Hoặc bạn có thể sử dụng group_concat(distinct val) không có nhóm group by chỉ thị (!) để nhận kết quả một dòng.

Hoặc thậm chí cast(concat('[', group_concat(distinct val), ']') as json) để có được một mảng json thích hợp:[15, 66, 578, 603, 751, 753, 801, 803] .

Đọc Các phương pháp hay nhất để sử dụng MySQL làm bộ nhớ JSON của tôi :)




  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 để loại bỏ những nhận xét này trong MySQL dump?

  2. Lỗi nghiêm trọng:Vui lòng đọc phần Bảo mật của sách hướng dẫn để tìm hiểu cách chạy mysqld dưới dạng root

  3. Rails `where` với thời gian ít hơn các truy vấn

  4. mysql.connector.errors.ProgrammingError:Không xử lý được thông số định dạng; không thể chuyển đổi 'danh sách' Python thành loại MySQL

  5. rò rỉ bộ nhớ trong tập lệnh php