Aufteilen von Werten in mehrere Zeilen in SQL
Eine häufige Aufgabe bei der Datenverarbeitung besteht darin, eine durch Kommas getrennte Zeichenfolge in mehrere Zeilen aufzuteilen, z am Beispiel des Folgenden Anfrage:
Problem:
Bei einer gegebenen Tabelle mit einer ID-Spalte und einer Namensspalte mit durch Kommas getrennten Werten werden die Daten im folgenden Format zurückgegeben:
id | name |
---|---|
1 | a |
1 | b |
1 | c |
2 | b |
Lösung:
Um dies zu erreichen, können wir MySQL nutzen SUBSTRING_INDEX-Funktion in Verbindung mit einer Zahlentabelle, die eine Zahlenfolge bis zur maximalen Anzahl zu teilender Felder enthält. Die folgende Abfrage veranschaulicht diesen Ansatz:
SELECT tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name FROM numbers INNER JOIN tablename ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1 ORDER BY id, n
Wenn das Erstellen einer Zahlentabelle nicht möglich ist, können wir die folgende Abfrage verwenden, um die Zahlenfolge innerhalb der Abfrage selbst zu generieren:
SELECT tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name FROM ( SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) AS numbers INNER JOIN tablename ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1 ORDER BY id, n
Demo:
[SQL Fiddle Demo](https://www.sqlfiddle.com/#!5/cf4386/1)
Das obige ist der detaillierte Inhalt vonWie teile ich durch Kommas getrennte Werte in mehrere Zeilen in SQL auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!