Per ottenere i dati dell'intero database - SqlFiddle Demo
Per ottenere i dati di una sola tabella - - SqlFiddle Demo
Ho fatto una soluzione complessa ma accettabile. Ma necessita di miglioramenti .
Questa è una procedura complessa con una codifica complessa, in particolare la query che recupera tutte le righe di tutte le colonne in un unico risultato da group_concat
e formati con una concatenazione complessa.
Necessità semplificata, efficiente e funzionante in tutti gli scenari.
Alcuni dettagli della mia soluzione :Di seguito è la parte importante, l'altra è solo condizioni/Looping (non sono a portata di mano con la documentazione inoltre ha bisogno di tempo e suggerimenti, qualcuno potrebbe aiutarmi nella sua formattazione e miglioramento, scusa per qualsiasi inconveniente, comunque sarò felice per qualsiasi aiuto da te e da me)
Nota:group_concat(yourColumn separator ' --anySeparator-- ') sta unendo tutte le righe della tua colonna in modo tale che le righe siano separate da --anySeparator--
select group_concat(column_name separator '`,`') into @cns1 from
information_schema.columns where table_schema=dn and [email protected];
1 :i nomi_colonna sono ottenuti come un unico valore separato da
`,` => @cs1 = id`,`ename`,`did
select group_concat(column_name separator '`,"\',\'",`') into @cns2
from information_schema.columns where table_schema=dn and [email protected];
2 :i nomi_colonna sono ottenuti come un unico valore separato da
`','` => @cn2 = id`','`ename`','`did
set @cns1=concat("`",@cns1,"`"); set @cns2=concat("`",@cns2,"`");
3:la lettera mancante (`) viene inserita all'inizio e alla fine dei nomi delle colonne
set @res=concat(@res," insert into ",@tn,"(",@cns1,") values ('");
4:Basta inserire res= " insert into emp(
`id` ,
`ename` ,
`did` ) values("
Qui puoi vedere perché ho inserito i separatori (la formattazione di MySql è stata raggiunta)
set @temp := '';
set @q := concat("select group_concat(concat(",@cns2,") separator \"'),('\")
from ",dn,".",@tn, " into @temp");
Qui sopra c'è l'affermazione più importante Ottiene tutte le righe di dati dalla tabella come righe di una singola colonna e inoltre queste righe vengono unite separate da '),('
5.1 concat(",@cns2,")
ottiene i valori di tutte le colonne in una singola.
5.2 Dopo il più esterno concat ora @q è
@q = "select group_concat(`id`','`ename`','`,did` separator '),(' from
mydb.emp into @temp";
5.3:group_concat unirà tutte le righe di quella colonna combinata in un unico valore. I valori delle colonne verranno uniti tramite separatori esistenti in @cns2 e l'unione a livello di righe sarà con '),('
prepare s1 from @q;
execute s1;deallocate prepare s1;
set @res = concat(@res,@temp,");");
@q viene eseguito
set @res = concat(@res,@temp,");");
6:E otterremo il risultato come
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
E dopo @res = concat(@res,@temp,");");
otteniamo
insert into emp(`id`,`ename`,`did`) values ('1','e1','4'),('2','e2','4'),
('3','e3','2'),('4','e4','4'),('5','e5','3);