Memisahkan Nilai kepada Berbilang Baris dalam SQL
Satu tugas biasa dalam pemprosesan data ialah membahagikan rentetan yang dipisahkan koma kepada beberapa baris, sebagai dicontohkan oleh yang berikut permintaan:
Masalah:
Memandangkan jadual dengan lajur id dan lajur nama yang mengandungi nilai dipisahkan koma, kembalikan data dalam format berikut:
id | name |
---|---|
1 | a |
1 | b |
1 | c |
2 | b |
Penyelesaian:
Untuk mencapai matlamat ini, kita boleh memanfaatkan fungsi SUBSTRING_INDEX MySQL bersama-sama dengan jadual nombor yang mengandungi urutan nombor sehingga bilangan maksimum medan untuk dipecahkan. Pertanyaan di bawah menunjukkan pendekatan ini:
SELECT tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name FROM numbers INNER JOIN tablename ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1 ORDER BY id, n
Jika membuat jadual nombor tidak boleh dilaksanakan, kami boleh menggunakan pertanyaan berikut untuk menjana urutan nombor dalam pertanyaan itu sendiri:
SELECT tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name FROM ( SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) AS numbers INNER JOIN tablename ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1 ORDER BY id, n
Demo:
[SQL Fiddle Demo](https://www.sqlfiddle.com/#!5/cf4386/1)
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Nilai Dipisahkan Koma kepada Berbilang Baris dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!