Masalah:
Anda menghadapi situasi di mana data menunjukkan perhubungan satu-ke-banyak, dan anda ingin mewakilinya dengan cara yang lebih tersusun dan boleh dibaca. Khususnya, anda ingin menukar jadual dengan lajur yang mengandungi ID unik dan senarai nilai yang dipisahkan koma menjadi jadual yang setiap nilai berbeza dipaparkan dalam lajur yang berasingan.
Penyelesaian SQL Informix:
Pendekatan yang disyorkan dalam Informix SQL adalah untuk menggunakan fungsi agregat yang ditentukan pengguna. Walaupun Informix tidak menawarkan fungsi group_concat() secara asli, anda boleh mencipta agregat tersuai yang meniru fungsinya.
Mencipta Agregat Ditakrifkan Pengguna:
Kod berikut menunjukkan cara untuk mencipta yang ditakrifkan pengguna yang diperlukan agregat:
CREATE FUNCTION gc_init(dummy VARCHAR(255)) RETURNING LVARCHAR; RETURN ''; END FUNCTION; CREATE FUNCTION gc_iter(result LVARCHAR, value VARCHAR(255)) RETURNING LVARCHAR; IF result = '' THEN RETURN TRIM(value); ELSE RETURN result || ',' || TRIM(value); END IF; END FUNCTION; CREATE FUNCTION gc_comb(partial1 LVARCHAR, partial2 LVARCHAR) RETURNING LVARCHAR; IF partial1 IS NULL OR partial1 = '' THEN RETURN partial2; ELIF partial2 IS NULL OR partial2 = '' THEN RETURN partial1; ELSE RETURN partial1 || ',' || partial2; END IF; END FUNCTION; CREATE FUNCTION gc_fini(final LVARCHAR) RETURNING LVARCHAR; RETURN final; END FUNCTION; CREATE AGGREGATE group_concat WITH (INIT = gc_init, ITER = gc_iter, COMBINE = gc_comb, FINAL = gc_fini);
Penggunaan:
Setelah anda mencipta agregat, anda boleh memanfaatkannya dalam pertanyaan untuk mencapai transformasi yang diingini:
SELECT id, group_concat(codes) FROM anonymous_table GROUP BY id;
Contoh:
Mari kita pertimbangkan contoh jadual bernama anonymous_table:
CREATE TEMP TABLE anonymous_table ( id INTEGER NOT NULL, codes CHAR(4) NOT NULL, PRIMARY KEY (id, codes) ); INSERT INTO anonymous_table VALUES(63592, 'PELL'); INSERT INTO anonymous_table VALUES(58640, 'SUBL'); INSERT INTO anonymous_table VALUES(58640, 'USBL'); INSERT INTO anonymous_table VALUES(73571, 'PELL'); INSERT INTO anonymous_table VALUES(73571, 'USBL'); INSERT INTO anonymous_table VALUES(73571, 'SUBL');
Menggunakan pertanyaan yang dinyatakan di atas pada jadual ini akan menghasilkan output berikut:
58640 SUBL,USBL 63592 PELL 73571 PELL,SUBL,USBL
Ini menunjukkan bagaimana fungsi agregat secara berkesan mengumpulkan dan menggabungkan kod yang dikaitkan dengan setiap ID unik , mempersembahkan data dengan lebih teratur.
Atas ialah kandungan terperinci Bagaimana untuk Mengubah Perhubungan Satu-dengan-Banyak kepada Lajur Berbeza dalam Informix SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!