Heim >Datenbank >MySQL-Tutorial >Wie verbinde ich durch Kommas getrennte Datenspalten aus zwei Tabellen?

Wie verbinde ich durch Kommas getrennte Datenspalten aus zwei Tabellen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-03 15:31:39976Durchsuche

How to Join Comma-Delimited Data Columns from Two Tables?

Komma-getrennte Datenspalten verbinden

Datentabellen enthalten häufig durch Kommas getrennte Werte in Zellen. Das Extrahieren und Normalisieren dieser Werte kann für die weitere Datenanalyse von entscheidender Bedeutung sein. In diesem Artikel werden wir Techniken untersuchen, um durch Kommas getrennte Daten in zwei Tabellen zusammenzuführen und die Ergebnisse in einem konsolidierten Format darzustellen.

Betrachten Sie die folgenden zwei Tabellen:

Tabelle 1 ( T1)

col1 col2
C1 john
C2 alex
C3 piers
C4 sara

Tabelle 2 (T2)

col1 col2
R1 C1,C2,C4
R2 C3,C4
R3 C1,C4

Gewünschtes Ergebnis:

col1 col2
R1 john,alex,sara
R2 piers,sara
R3 john,sara

Lösungen:

Normalisierung:

Die ideale Lösung ist die Normalisierung von Tabelle 2 durch Aufteilen der durch Kommas getrennten Werte in eine separate Beziehung. Dadurch würde eine neue Tabelle mit zwei Spalten erstellt: Spalte 1 und Spalte 2, wobei jede Zeile einen Wert darstellt, der zuvor in der Spalte Spalte 2 von Tabelle 2 gespeichert wurde.

Mit Unterabfrage verbinden (FÜR XML-PFAD):

Wenn eine Normalisierung nicht möglich ist, können wir eine Unterabfrage zusammen mit der FOR XML PATH-Klausel verwenden, um die durch Kommas getrennten Werte als abzurufen einzelne Zeichenfolge.

SELECT col1, 
(
  SELECT ', '+t1.col2
  FROM t1
  WHERE ','+t2.col2+',' LIKE '%,'+CAST(t1.col1 AS VARCHAR(10))+',%'
  FOR XML PATH(''), TYPE
).value('substring(text()[1], 3)', 'VARCHAR(MAX)') AS col2
FROM t2;

Mit Split-Funktion verbinden:

Alternativ können wir eine benutzerdefinierte Funktion namens Split erstellen, um einzelne Werte aus der durch Kommas getrennten Zeichenfolge zu extrahieren string.

CREATE FUNCTION [dbo].[Split](@String VARCHAR(MAX), @Delimiter CHAR(1))
RETURNS @temptable TABLE (items VARCHAR(MAX))
AS
BEGIN
    DECLARE @idx INT;
    DECLARE @slice VARCHAR(8000);

    SELECT @idx = 1;
    IF LEN(@String) < 1 OR @String IS NULL RETURN;

    WHILE @idx != 0
    BEGIN
        SET @idx = CHARINDEX(@Delimiter, @String);
        IF @idx != 0
            SET @slice = LEFT(@String, @idx - 1);
        ELSE
            SET @slice = @String;

        IF (LEN(@slice) > 0)
            INSERT INTO @temptable(Items) VALUES (@slice);

        SET @String = RIGHT(@String, LEN(@String) - @idx);
        IF LEN(@String) = 0 BREAK;
    END
RETURN;
END;

Mit der Split-Funktion können wir die einzelnen Werte entweder in separaten Zeilen speichern oder sie wieder zu einer verketten Durch Kommas getrennte Zeichenfolge.

Das obige ist der detaillierte Inhalt vonWie verbinde ich durch Kommas getrennte Datenspalten aus zwei Tabellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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