For at få data fra hele databasen - SqlFiddle Demo
For at få data for kun én tabel - - SqlFiddle Demo
Jeg har lavet en kompleks, men acceptabel løsning. Men trænger til forbedring .
Dette er en kompleks procedure med kompleks kodning, især forespørgslen, som henter alle rækker i alle kolonner til et enkelt resultat af group_concat
og formater med en kompleks sammenkædning.
Har brug for det forenklet, effektivt og fungerende i alle scenarier.
Nogle detaljer om min løsning :Følgende er den vigtige del, andet er kun betingelser/sløjfer (jeg er ikke handy med dokumentation, også det har brug for tid og forslag, nogen kan hjælpe mig med dets formatering og forbedring, beklager ulejligheden, men jeg vil være glad for enhver hjælp fra dig og mig)
Bemærk:group_concat(yourColumn separator ' --anySeparator-- ') fletter alle rækker i din kolonne som en sådan, at rækker adskilles af --anySeparator--
select group_concat(column_name separator '`,`') into @cns1 from
information_schema.columns where table_schema=dn and [email protected];
1 :kolonnenavne fås som en enkelt værdi adskilt af
`,` => @cs1 = id`,`ename`,`did
select group_concat(column_name separator '`,"\',\'",`') into @cns2
from information_schema.columns where table_schema=dn and [email protected];
2 :kolonnenavne fås som en enkelt værdi adskilt af
`','` => @cn2 = id`','`ename`','`did
set @cns1=concat("`",@cns1,"`"); set @cns2=concat("`",@cns2,"`");
3:Manglende bogstav (`) sættes i begyndelsen og slutningen af kolonnenavne
set @res=concat(@res," insert into ",@tn,"(",@cns1,") values ('");
4:Får simpelthen res= " insert into emp(
`id` ,
`ename` ,
`did` ) values("
Her kan du se, hvorfor jeg har sat separatorer (MySql-formatering er opnået)
set @temp := '';
set @q := concat("select group_concat(concat(",@cns2,") separator \"'),('\")
from ",dn,".",@tn, " into @temp");
Ovenfor er det mest afgørende udsagn Den henter alle datarækker fra tabel som rækker i en enkelt kolonne, og yderligere flettes disse rækker adskilt af '),('
5.1 concat(",@cns2,")
henter værdier for alle kolonner i en enkelt.
5.2 Efter ydre mest konkat er nu @q
@q = "select group_concat(`id`','`ename`','`,did` separator '),(' from
mydb.emp into @temp";
5.3 :group_concat vil flette alle rækker i den kombinerede kolonne til én værdi. Kolonneværdier vil blive sammenføjet gennem separatorer, der findes i @cns2, og sammenføjning på rækkeniveau vil være med '),('
prepare s1 from @q;
execute s1;deallocate prepare s1;
set @res = concat(@res,@temp,");");
@q udføres
set @res = concat(@res,@temp,");");
6:Og vi får resultatet som
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
Og efter @res = concat(@res,@temp,");");
vi får
insert into emp(`id`,`ename`,`did`) values ('1','e1','4'),('2','e2','4'),
('3','e3','2'),('4','e4','4'),('5','e5','3);