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

Tách (bùng nổ) các giá trị cột được phân tách bằng dấu phẩy thành các hàng

ĐÃ CẬP NHẬT Bạn có thể làm điều đó với SQL như thế này

INSERT INTO branch_table (id, branch_id)
SELECT e.id, SUBSTRING_INDEX(SUBSTRING_INDEX(e.branch_ids, ',', n.n), ',', -1) branch_id
  FROM eligibility_table e CROSS JOIN 
(
   SELECT a.N + b.N * 10 + 1 n
     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) a
   ,(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) b
    ORDER BY n
) n
 WHERE n.n <= 1 + (LENGTH(e.branch_ids) - LENGTH(REPLACE(e.branch_ids, ',', '')))
 ORDER BY id, branch_id
  • Truy vấn con có bí danh là n sẽ tạo nhanh một chuỗi số (số hoặc bảng kiểm đếm) từ 1 đến 100 trong trường hợp cụ thể này bằng cách sử dụng UNION ALLCROSS JOIN . Đôi khi, thật tiện lợi khi có một bảng kiểm đếm thực sự trong db của bạn .
  • Trong ngoài cùng, hãy chọn trong cùng SUBSTRING_INDEX() nhận mọi thứ lên đến phần tử thứ n trong danh sách và SUBSTRING_INDEX() bên ngoài trích xuất phần lớn bên phải sau dấu phân cách cuối cùng để nhận phần tử thứ n một cách hiệu quả.
  • CROSS JOIN cho phép chúng tôi tạo ra một tập hợp các hàng là sản phẩm của cartesian (gồm 100 hàng trong n và tất cả các hàng trong eli đủ điều kiện_table)
  • điều kiện trong WHERE mệnh đề lọc ra tất cả các hàng không cần thiết khỏi tập kết quả

Lưu ý:truy vấn này sẽ chia ra tối đa 100 id nhánh. Nếu bạn cần nhiều hơn hoặc ít hơn, bạn có thể điều chỉnh giới hạn bằng cách chỉnh sửa truy vấn con bên trong

Kết quả trong branch_table:

| ID | BRANCH_ID |
------------------
|  1 |       621 |
|  1 |       622 |
|  1 |       623 |
|  1 |       625 |
|  2 |       621 |
|  2 |       650 |

Đây là SQLFiddle bản demo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thủ tục lưu trữ mySQL để tách chuỗi bằng dấu phân cách

  2. cách thêm cột mới mỗi khi tôi chạy chương trình python

  3. thay đổi định dạng thời gian trong truy vấn mysql ĐẶT HÀNG BẰNG CÁCH

  4. Học thuyết Symfony2 kết nối với cơ sở dữ liệu qua SSL

  5. Chuyển giá trị biến từ JS sang PHP