För att få data från hela databasen - SqlFiddle Demo
För att få data för endast en tabell - - SqlFiddle Demo
Jag har gjort en komplex men acceptabel lösning. Men behöver förbättras .
Detta är en komplex procedur med komplex kodning, särskilt frågan som hämtar alla rader i alla kolumner till ett enda resultat av group_concat
och format med en komplex sammanlänkning.
Behöver det förenklat, effektivt och fungerande i alla scenarier.
Några detaljer om min lösning :Följande är den viktiga delen, annat är bara villkor/slingor (jag är inte händig med dokumentation, det behöver tid och förslag, någon kanske kan hjälpa mig med formateringen och förbättringen, ursäkta för eventuella besvär, men jag är glad för all hjälp från dig och mig)
Notera:group_concat(din kolumnavgränsare ' --anySeparator-- ') slår samman alla rader i din kolumn som en sådan att rader separeras med --anySeparator--
select group_concat(column_name separator '`,`') into @cns1 from
information_schema.columns where table_schema=dn and [email protected];
1 :kolumnnamn ges som ett enda värde avgränsat med
`,` => @cs1 = id`,`ename`,`did
select group_concat(column_name separator '`,"\',\'",`') into @cns2
from information_schema.columns where table_schema=dn and [email protected];
2 :kolumnnamn ges som ett enda värde separerat av
`','` => @cn2 = id`','`ename`','`did
set @cns1=concat("`",@cns1,"`"); set @cns2=concat("`",@cns2,"`");
3:Saknade bokstav (`) sätts i början och slutet av kolumnnamn
set @res=concat(@res," insert into ",@tn,"(",@cns1,") values ('");
4:Får helt enkelt res= " insert into emp(
`id` ,
`ename` ,
`did` ) values("
Här kan du se varför jag har satt separatorer (MySql-formatering uppnås)
set @temp := '';
set @q := concat("select group_concat(concat(",@cns2,") separator \"'),('\")
from ",dn,".",@tn, " into @temp");
Ovan är det mest avgörande uttalandet Den hämtar alla datarader från tabellen som rader i en enda kolumn och vidare slås dessa rader samman och separeras med '),('
5.1 concat(",@cns2,")
hämtar värden för alla kolumner i en enda.
5.2 Efter det yttre mest konkat är nu @q
@q = "select group_concat(`id`','`ename`','`,did` separator '),(' from
mydb.emp into @temp";
5.3 :group_concat kommer att slå samman alla rader i den kombinerade kolumnen till ett värde. Kolumnvärden kommer att sammanfogas genom separatorer som finns i @cns2 och sammanfogning på radnivå kommer att ske med '),('
prepare s1 from @q;
execute s1;deallocate prepare s1;
set @res = concat(@res,@temp,");");
@q körs
set @res = concat(@res,@temp,");");
6:Och vi kommer att få resultat 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
Och 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);