Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengubah Perhubungan Satu-dengan-Banyak kepada Lajur Berbeza dalam Informix SQL?

Bagaimana untuk Mengubah Perhubungan Satu-dengan-Banyak kepada Lajur Berbeza dalam Informix SQL?

DDD
Lepaskan: 2025-01-03 04:15:39
asal
866 orang telah melayarinya

How to Transform One-to-Many Relationships into Distinct Columns in Informix SQL?

Cara Memaparkan Hubungan Satu-dengan-Banyak sebagai Lajur Berbeza

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);
Salin selepas log masuk

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;
Salin selepas log masuk

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');
Salin selepas log masuk

Menggunakan pertanyaan yang dinyatakan di atas pada jadual ini akan menghasilkan output berikut:

58640 SUBL,USBL
63592 PELL
73571 PELL,SUBL,USBL
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan