Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pisahkan (meledak) nilai kolom yang dibatasi koma menjadi baris

DIPERBARUI Anda dapat melakukannya dengan SQL seperti ini

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
  • Subquery dengan alias n menghasilkan dengan cepat urutan angka (angka atau tabel penghitungan) dari 1 hingga 100 dalam kasus khusus ini menggunakan UNION ALL dan CROSS JOIN . Terkadang berguna untuk memiliki tabel penghitungan nyata di db Anda .
  • Di luar pilih terdalam SUBSTRING_INDEX() mendapatkan semuanya hingga elemen ke-n dalam daftar dan SUBSTRING_INDEX() outer luar ekstrak sebagian besar kanan setelah pembatas terakhir secara efektif mendapatkan elemen ke-n itu sendiri.
  • CROSS JOIN memungkinkan kita untuk menghasilkan satu set baris yang merupakan produk kartesius (dari 100 baris dalam n dan semua baris dalam tabel_kelayakan)
  • kondisi di WHERE klausa menyaring semua baris yang tidak perlu dari kumpulan hasil

Catatan:kueri ini akan membagi hingga 100 id cabang. Jika Anda membutuhkan lebih atau kurang, Anda dapat menyesuaikan batas dengan mengedit subquery dalam

Hasil di branch_table:

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

Ini SQLFiddle 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. Pilih di MySQL di mana semua baris memenuhi syarat

  2. Operator MySQL PILIH bagaimana cara mendapatkan satu hasil baris yang tepat dari baris yang serupa?

  3. tabel ditentukan dua kali baik sebagai target untuk INSERT dan sebagai sumber data yang terpisah

  4. Bagaimana menemukan semua interval nilai stempel waktu setiap menit antara dua catatan stempel waktu di database sql saya

  5. pengganti wildcard MySQL