Heim >Datenbank >MySQL-Tutorial >Wie verbinde ich durch Kommas getrennte Datenspalten aus zwei Tabellen?
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!