Om gegevens van de hele database te krijgen - SqlFiddle-demo
Om gegevens van slechts één tabel te krijgen - - SqlFiddle Demo
Ik heb een complexe maar acceptabele oplossing gemaakt. Maar moet worden verbeterd .
Dit is een complexe procedure met complexe codering, vooral de query die alle rijen van alle kolommen ophaalt in een enkel resultaat door group_concat
en formaten met een complexe aaneenschakeling.
Moet het vereenvoudigd, efficiënt en in alle scenario's werken.
Enkele details van mijn oplossing :Het volgende is het belangrijkste deel, andere zijn gewoon voorwaarden / lus (ik ben niet handig met documentatie, het heeft ook tijd en suggesties nodig, iemand kan me helpen bij het formatteren en verbeteren, sorry voor het ongemak, maar ik zal blij zijn voor alle hulp van jou en mij)
Opmerking:group_concat(yourColumn separator ' --anySeparator-- ') voegt alle rijen van uw kolom samen tot één zodanig dat rijen worden gescheiden door --anySeparator--
select group_concat(column_name separator '`,`') into @cns1 from
information_schema.columns where table_schema=dn and [email protected];
1 :column_names worden als een enkele waarde weergegeven, gescheiden door
`,` => @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 worden als een enkele waarde weergegeven, gescheiden door
`','` => @cn2 = id`','`ename`','`did
set @cns1=concat("`",@cns1,"`"); set @cns2=concat("`",@cns2,"`");
3:Ontbrekende letter (`) wordt aan het begin en einde van kolomnamen geplaatst
set @res=concat(@res," insert into ",@tn,"(",@cns1,") values ('");
4:laat eenvoudig res= " insert into emp(
`id` ,
`ename` ,
`deed` ) values("
Hier kun je zien waarom ik scheidingstekens heb geplaatst (MySql-opmaak is bereikt)
set @temp := '';
set @q := concat("select group_concat(concat(",@cns2,") separator \"'),('\")
from ",dn,".",@tn, " into @temp");
Hierboven staat de meest cruciale uitspraak Het haalt alle gegevensrijen uit de tabel als rijen van een enkele kolom en verder worden deze rijen samengevoegd, gescheiden door '),('
5.1 concat(",@cns2,")
krijgt waarden van alle kolommen in één.
5.2 Na de buitenste concat is nu @q
@q = "select group_concat(`id`','`ename`','`,did` separator '),(' from
mydb.emp into @temp";
5.3 :group_concat voegt alle rijen van die gecombineerde kolom samen tot één waarde. Kolomwaarden worden samengevoegd door scheidingstekens die bestaan in @cns2 en samenvoeging op rijniveau gebeurt met '),('
prepare s1 from @q;
execute s1;deallocate prepare s1;
set @res = concat(@res,@temp,");");
@q wordt uitgevoerd
set @res = concat(@res,@temp,");");
6:En we zullen resultaat krijgen als
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
En na @res = concat(@res,@temp,");");
we krijgen
insert into emp(`id`,`ename`,`did`) values ('1','e1','4'),('2','e2','4'),
('3','e3','2'),('4','e4','4'),('5','e5','3);