Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyertai Lajur Data Terhad Koma dalam SQL?
Cabaran:
Diberi dua jadual, satu dengan data dipisahkan koma lajur, tugasnya adalah untuk mendapatkan semula data daripada jadual dan membentangkan keputusan dengan dipisahkan koma nilai yang dicantumkan ke dalam rentetan tunggal untuk setiap baris.
Penormalan:
Pendekatan yang ideal ialah menormalkan jadual dengan lajur data yang dipisahkan koma, menghapuskan keperluan untuk manipulasi rentetan yang kompleks. Dengan mencipta jadual baharu di mana setiap nilai yang dipisahkan koma menjadi baris baharu, anda kemudiannya boleh menyertai jadual pada medan biasa dengan mudah.
Fungsi Pisah:
Jika normalisasi tidak mungkin, fungsi split boleh dibuat untuk menukar nilai yang dipisahkan koma kepada baris yang boleh dicantumkan. Fungsi ini kemudiannya boleh digunakan untuk sama ada meninggalkan data dalam berbilang baris atau menggabungkan nilai kembali ke dalam senarai yang dipisahkan koma.
UNTUK LALUAN dan STUFF XML:
Sebagai alternatif, anda boleh menggunakan teknik FOR XML PATH dan STUFF untuk mendapatkan semula data. FOR XML PATH akan menukar nilai yang dipisahkan koma kepada XML dan STUFF boleh digunakan untuk menggabungkan XML menjadi satu rentetan.
Aplikasi Direct FOR XML PATH:
Pendekatan terakhir ialah memohon FOR XML PATH terus ke lajur data. Dengan memilih lajur yang dikehendaki dan menggunakan pertanyaan yang sesuai, anda boleh mendapatkan semula nilai yang dipisahkan koma dan mengagregatkannya ke dalam satu rentetan.
Bergantung pada pendekatan yang dipilih, pelaksanaan akan berbeza-beza. Contoh berikut memberikan gambaran ringkas tentang cara setiap kaedah boleh dilaksanakan:
Penormalan:
CREATE TABLE NormalizedTable ( id INT, value VARCHAR(255), ); INSERT INTO NormalizedTable (id, value) VALUES (1, 'john'), (2, 'alex'), (3, 'piers'), (4, 'sara'), (5, 'C1'), (6, 'C2'), (7, 'C3'), (8, 'C4'), (9, 'R1'), (10, 'R2'), (11, 'R3'); SELECT DISTINCT T2.col1, STUFF(( SELECT ', ' + T1.col2 FROM NormalizedTable T1 INNER JOIN Table2 T2 ON T1.id = T2.col2 FOR XML PATH('') ), 1, 2, '');
Fungsi Pisah:
CREATE FUNCTION dbo.Split (@String VARCHAR(MAX), @Delimiter CHAR(1)) RETURNS TABLE AS RETURN WITH CTE AS ( SELECT 1 AS RowNum, @String AS Value UNION ALL SELECT RowNum + 1, SUBSTRING(@String, RowNum + 1, LEN(@Delimiter)) FROM CTE WHERE SUBSTRING(@String, RowNum + 1, LEN(@Delimiter)) <> '' ) SELECT RowNum, Value AS Item FROM CTE; -- Usage SELECT DISTINCT T2.col1, STUFF(( SELECT ', ' + T1.col2 FROM ( SELECT DISTINCT Value AS col2 FROM dbo.Split(T2.col2, ',') ) T1 FOR XML PATH('') ), 1, 2, '');
UNTUK LALUAN XML dan STUFF:
SELECT T2.col1, ( SELECT ', ' + T1.col2 FROM Table1 T1 WHERE ',' + T2.col2 + ',' LIKE '%,' + CAST(T1.col1 AS VARCHAR(10)) + ',%' FOR XML PATH('') ).value('substring(text()[1], 3)', 'VARCHAR(MAX)') AS col2 FROM Table2 T2;
Dengan memilih pendekatan yang sesuai dan melaksanakan kod yang diperlukan, anda boleh menggabungkan data yang dipisahkan koma dengan berkesan ke dalam rentetan tunggal untuk setiap baris dalam jadual.
Atas ialah kandungan terperinci Bagaimana untuk Menyertai Lajur Data Terhad Koma dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!