Memecahkan Lajur Dipisahkan Koma menjadi Baris dengan DB2
Dalam bidang pengurusan pangkalan data, pengendalian nilai yang dipisahkan koma selalunya boleh menimbulkan cabaran, terutamanya apabila ia datang untuk mengekstrak nilai individu ke dalam baris yang berasingan. Satu senario sedemikian timbul apabila jadual mengandungi lajur dengan rujukan dipisahkan koma, dan timbul keperluan untuk memisahkan rujukan ini kepada baris individu.
Pernyataan Masalah
Pertimbangkan jadual dengan struktur berikut:
Id | FK_ID | Reference ----------------------- 1 | 2100 | GI2, GI32 2 | 2344 | GI56
Matlamatnya adalah untuk mengubah data ini kepada yang berikut output yang diingini:
Id | FK_ID | Reference ----------------------- 1 | 2100 | GI2 2 | 2100 | GI32 3 | 2344 | GI56
Penyelesaian DB2
Untuk mencapai transformasi data ini, DB2 menyediakan pernyataan SQL rekursif yang secara berulang memisahkan nilai yang dipisahkan koma ke dalam baris individu. Penyelesaian itu memanfaatkan kod SQL berikut:
WITH unpivot (lvl, id, fk_ref, reference, tail) AS ( SELECT 1, id, fk_ref, CASE WHEN LOCATE(',',reference) > 0 THEN TRIM(LEFT(reference, LOCATE(',',reference)-1)) ELSE TRIM(reference) END, CASE WHEN LOCATE(',',reference) > 0 THEN SUBSTR(reference, LOCATE(',',reference)+1) ELSE '' END FROM yourtable UNION ALL SELECT lvl + 1, id, fk_ref, CASE WHEN LOCATE(',', tail) > 0 THEN TRIM(LEFT(tail, LOCATE(',', tail)-1)) ELSE TRIM(tail) END, CASE WHEN LOCATE(',', tail) > 0 THEN SUBSTR(tail, LOCATE(',', tail)+1) ELSE '' END FROM unpivot WHERE lvl < 100 AND tail != '') SELECT id, fk_ref, reference FROM unpivot
Penjelasan
CTE rekursif (Ungkapan Jadual Biasa) yang dinamakan unpivot menggunakan klausa UNION ALL untuk memisahkan Rujukan secara berulang lajur ke dalam nilai individu:
Nota:
Adalah penting untuk mengelak daripada menyimpan data dalam format yang dipisahkan koma, kerana ini boleh membawa kepada isu integriti data dan menjadikan manipulasi dan pertanyaan data lebih kompleks. Walau bagaimanapun, penyelesaian yang disediakan menawarkan cara untuk mengubah data sedemikian kepada format yang lebih terurus dan boleh digunakan dalam kes yang tidak dapat dielakkan atau perlu.
Atas ialah kandungan terperinci Bagaimana untuk Memecah Lajur Dipisahkan Koma kepada Baris Menggunakan DB2 SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!