Para obtener datos de toda la base de datos:demostración de SqlFiddle
Para obtener datos de una sola tabla - - Demostración de SqlFiddle
He hecho una solución compleja pero aceptable. Pero necesita mejoras .
Este es un procedimiento complejo con una codificación compleja, especialmente la consulta que obtiene todas las filas de todas las columnas en un solo resultado por group_concat
y formatos con una concatenación compleja.
Lo necesita simplificado, eficiente y que funcione en todos los escenarios.
Algunos detalles de mi solución :La siguiente es la parte importante, otra es solo condiciones/bucle (no soy hábil con la documentación, también necesita tiempo y sugerencias, alguien podría ayudarme a formatear y mejorar, disculpe las molestias, sin embargo, estaré encantado de cualquier ayuda) de ti y de mí)
Nota:group_concat(yourColumn separator ' --anySeparator-- ') fusiona todas las filas de su columna como una tal que las Filas están separadas por --anySeparator--
select group_concat(column_name separator '`,`') into @cns1 from
information_schema.columns where table_schema=dn and [email protected];
1:column_names se obtienen como un solo valor separado por
`,` => @cs1 = id`,`ename`,`did
select group_concat(column_name separator '`,"\',\'",`') into @cns2
from information_schema.columns where table_schema=dn and [email protected];
2:column_names se obtienen como un solo valor separado por
`','` => @cn2 = id`','`ename`','`did
set @cns1=concat("`",@cns1,"`"); set @cns2=concat("`",@cns2,"`");
3:La letra que falta (`) se coloca al principio y al final de los nombres de columna
set @res=concat(@res," insert into ",@tn,"(",@cns1,") values ('");
4:Simplemente hace que res= " insert into emp(
`id` ,
`ename` ,
`hizo` ) values("
Aquí puede ver por qué he puesto separadores (se logra el formato MySql)
set @temp := '';
set @q := concat("select group_concat(concat(",@cns2,") separator \"'),('\")
from ",dn,".",@tn, " into @temp");
Arriba está la declaración más crucial Obtiene todas las filas de datos de la tabla como filas de una sola columna y, además, estas filas se fusionan y se separan por '),('
5.1 concat(",@cns2,")
obtiene los valores de todas las columnas en una sola.
5.2 Después de la concatenación más externa ahora @q es
@q = "select group_concat(`id`','`ename`','`,did` separator '),(' from
mydb.emp into @temp";
5.3:group_concat fusionará todas las filas de esa columna combinada en un solo valor. Los valores de las columnas se unirán a través de los separadores existentes en @cns2 y la unión a nivel de filas se realizará con '),('
prepare s1 from @q;
execute s1;deallocate prepare s1;
set @res = concat(@res,@temp,");");
@q se ejecuta
set @res = concat(@res,@temp,");");
6:Y obtendremos el resultado como
res was = insert into emp(`id`,`ename`,`did`) values ('
@temp = 1','e1','4'),('2','e2','4'),
('3','e3','2'),('4','e4','4'),('5','e5','3
Y después de @res = concat(@res,@temp,");");
obtenemos
insert into emp(`id`,`ename`,`did`) values ('1','e1','4'),('2','e2','4'),
('3','e3','2'),('4','e4','4'),('5','e5','3);