2016-08-26 2 views
-1

Ich habe eine Tabelle wie folgt aus:MySQL: von einem Datensatz zu vielen Aufzeichnungen, ist es möglich?

code allValues 
-------------- 
C001 1,2,3,4 
C002 3,4,5 
C003 6,7 

und ich brauche eine Tabelle wie folgt zu erhalten:

code Value 
---------- 
C001 1 
C001 2 
C001 3 
C001 4 
C002 3 
C002 4 
C002 5 
C003 6 
C003 7 

Ca Ich mache es mit einer SQL-Anweisung? Ich benutze MySQL in PHPMyAdmin, nicht bewusst, welche spezifische Datenbank-Engine.

+0

Zuerst Komma getrennt Werte und in Tabelle speichern und dann diese Tabelle mit Haupttabelle –

+1

verbinden Sie können PHP verwenden, um die Werte aufzuteilen oder einen gespeicherten proc in mysql zu schreiben, um das gleiche zu tun. Also, die Antwort ist ja, es ist möglich. – Shadow

+0

Ist es möglich, einen Entwurf des gespeicherten Proc zu haben? – tic

Antwort

1

Wenn Sie eine Verweistabelle für jeden „allvalue“ haben, dann können Sie tun:

select t.code, lu.value 
from t join 
    lookup lu 
    on find_in_set(lu.value, t.allvalues) > 0; 

Eine andere Methode - wenn Sie die maximale Länge von allvalues wissen - ist String-Manipulation zu tun:

select t.code, 
     substring_index(substring_index(t.allvalues, ',', n.n), ',', -1) as vaue 
from t cross join 
    (select 1 as n union all select 2 union all select 3 union all select 4 
    ) n 
    on n.n <= length(t.allvalues) - length(replace(t.allvalues, ',', '')); 

Diese Version nimmt an, die maximale Länge ist "4", wie in der Frage.

Verwandte Themen