Separar cadena en múltiples filas en SQL

Henetworkingé una database, y en mis esfuerzos por hacerla más limpia y más útil, he encontrado el siguiente problema.

Después de mover la columna de files a una tabla separada, ahora tengo la tarea de separar estos files en filas diferentes. Por favor, mira mi ejemplo a continuación.

key | jobid | files | -------------------------------------------- 1 30012 file1.pdf;file2.pdf 2 30013 file3.pdf 3 30014 file4.pdf;file5.pdf;file6.pdf 

Me gustaría una statement SQL que convertiría la tabla en lo siguiente:

 key | jobid | files | -------------------------------------------- 1 30012 file1.pdf 2 30013 file3.pdf 3 30014 file4.pdf 4 30012 file2.pdf 5 30014 file5.pdf 6 30014 file6.pdf 

No importa si las inputs originales deben eliminarse para lograr esto, por lo que la siguiente solución también sería aceptable:

 key | jobid | files | -------------------------------------------- 4 30012 file1.pdf 5 30013 file3.pdf 6 30014 file4.pdf 7 30012 file2.pdf 8 30014 file5.pdf 9 30014 file6.pdf 

Básicamente solo necesito que los files se dividan en el; delimitador y una nueva fila creada con las cadenas divididas.

Cualquier ayuda que puedas proveer, sería apreciada.

En PHP (suponiendo que $ db es una connection de db válida y la key es auto_increment):

 $sql="select `key`, jobid, files from filestable where files like '%\\;%'"; $qry=mysql_query($sql,$db); $sql=array(); while (true) { $row=mysql_fetch_row($qry); if (!$row) break; $key=$row[0]; $jobid=$row[1]; $files=explode(';',$row[2]); foreach ($files as $file) { $file=mysql_real_escape_string($file,$db); $sql[]="insert into filestable (jobid,files) values ($jobid,'$file')"; } $sql[]="delete from filestables where `key`=$key"; } 

ahora $ sql tiene una matriz de instrucciones SQL para ejecutar, ya sea ejecutarlas al final del ciclo while, o combinarlas, escríbalas para más adelante, sea lo que sea que se ajuste a su patrón de carga.