2016-07-21 7 views
1

Ich möchte eine MySQL-Abfrage die Datensätze getrennt von folgenden Tabelle wählenWie teilt man eine durch Komma getrennte Zeichenkette auf und arrangiert sie dann sequentiell in MySQL?

ID AgentID Name Return Date 
    1 1,2,3  A  2016-05-22,2016-02-1,2016-1-15 
    2 2,4   B  2016-03-22,2016-04-1 

Antwort zu erwarten

ID AgentID Name Return Date 
1 1   A  2016-05-22 
1 2   A  2016-02-1 
1 3   A  2016-1-15 
2 2   B  2016-03-22 
2 4   B  2016-04-1 
+0

Bitte sagen Sie uns, dass dies, weil Sie ist‘ Ich habe einen grundlegenden Fehler in Ihrem ursprünglichen Design erkannt und möchte es nun korrigieren! – Strawberry

Antwort

2

Sie können MySQL SUBSTRING_INDEX() verwenden. Es wird die Teilzeichenfolge aus der angegebenen durch Komma getrennten Zeichenfolge vor einer angegebenen Anzahl von Vorkommen des Trennzeichens zurückgeben.

Try this, es scheint gut zu funktionieren:

SELECT ID 
     ,SUBSTRING_INDEX(SUBSTRING_INDEX(t.AgentID, ',', n.n), ',', -1) Agent 
     ,Name 
     ,SUBSTRING_INDEX(SUBSTRING_INDEX(t.Return_Date, ',', n.n), ',', -1) Return_Date 
FROM table1 t CROSS JOIN 
(
    SELECT a.N + b.N * 10 + 1 n 
    FROM 
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a 
    ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b 
    ORDER BY n 
) n 

WHERE n.n <= 1 + (LENGTH(t.Return_Date) - LENGTH(REPLACE(t.Return_Date, ',', ''))) 
ORDER BY ID; 

prüfen diese .. SQL Fiddle HERE

für weitere Untersuchungen gehen auf MySQL Split String Function

0

wenn Ihre Werte in TBLA und Sie einfügen möchten in TBLB als Abfrage wie diese

-1
INSERT INTO second_table ( 
     Field_1, 
     Field_2, 
     Field_3) 
SELECT Field_1, 
     Field_2, 
     Field_3 
     FROM first_table;