Heim > Datenbank > MySQL-Tutorial > Wie transformiere ich Eins-zu-Viele-Beziehungen in eindeutige Spalten in Informix SQL?

Wie transformiere ich Eins-zu-Viele-Beziehungen in eindeutige Spalten in Informix SQL?

DDD
Freigeben: 2025-01-03 04:15:39
Original
866 Leute haben es durchsucht

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

So zeigen Sie eine Eins-zu-Viele-Beziehung als unterschiedliche Spalten an

Problem:
Sie stoßen auf eine Situation, in der Daten Folgendes aufweisen: Eine Eins-zu-viele-Beziehung, und Sie möchten sie strukturierter und lesbarer darstellen. Konkret möchten Sie eine Tabelle mit Spalten, die eindeutige IDs und durch Kommas getrennte Wertelisten enthalten, in eine Tabelle umwandeln, in der jeder eindeutige Wert in einer separaten Spalte angezeigt wird.

Informix SQL-Lösung:
Der empfohlene Ansatz in Informix SQL ist die Verwendung einer benutzerdefinierten Aggregatfunktion. Während Informix nativ keine Funktion „group_concat()“ anbietet, können Sie ein benutzerdefiniertes Aggregat erstellen, das seine Funktionalität nachahmt.

Erstellen des benutzerdefinierten Aggregats:
Der folgende Code zeigt, wie um die notwendigen Benutzerdefiniert zu erstellen Aggregat:

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);
Nach dem Login kopieren

Verwendung:
Sobald Sie das Aggregat erstellt haben, können Sie es in einer Abfrage nutzen, um die gewünschte Transformation zu erreichen:

SELECT id, group_concat(codes)
FROM anonymous_table
GROUP BY id;
Nach dem Login kopieren

Beispiel:
Betrachten wir eine Beispieltabelle mit dem Namen anonyme_Tabelle:

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');
Nach dem Login kopieren

Das Anwenden der oben genannten Abfrage auf diese Tabelle würde die folgende Ausgabe ergeben:

58640 SUBL,USBL
63592 PELL
73571 PELL,SUBL,USBL
Nach dem Login kopieren

Dies zeigt, wie die Aggregatfunktion die mit jeder eindeutigen ID verknüpften Codes effektiv gruppiert und verkettet , wodurch die Daten besser organisiert dargestellt werden.

Das obige ist der detaillierte Inhalt vonWie transformiere ich Eins-zu-Viele-Beziehungen in eindeutige Spalten in Informix SQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage