データベース全体のデータを取得するには-SqlFiddleデモ
1つのテーブルのみのデータを取得するには---SqlFiddleデモ
私は複雑ですが許容できる解決策を作りました。 しかし改善が必要 。
これは複雑なコーディングを伴う複雑な手順であり、特にgroup_concat
によってすべての列のすべての行を単一の結果にフェッチするクエリです。 複雑な連結のフォーマット。
簡素化され、効率的で、すべてのシナリオで機能する必要があります。
私のソリューションの詳細 :以下は重要な部分です、他はただの条件/ループです(私はドキュメントが手元になく、時間と提案が必要です、誰かがそのフォーマットと改善で私を助けるかもしれません、ご不便をおかけして申し訳ありませんが、私はどんな助けでも喜んでいますあなたと私から)
注:group_concat(yourColumn Separ'--anySeparator--')は、行が--anySeparator-
で区切られるように、列のすべての行を1つにマージします。select group_concat(column_name separator '`,`') into @cns1 from
information_schema.columns where table_schema=dn and [email protected];
1:column_namesは、
で区切られた単一の値として取得されます`,` => @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は、
で区切られた単一の値として取得されます`','` => @cn2 = id`','`ename`','`did
set @cns1=concat("`",@cns1,"`"); set @cns2=concat("`",@cns2,"`");
3:欠落している文字( `)が列名の最初と最後に配置されます
set @res=concat(@res," insert into ",@tn,"(",@cns1,") values ('");
4:res= " insert into emp(
に挿入するだけです `id` ,
`ename` ,
`did` ) values("
ここで、なぜセパレーターを配置したのかがわかります(MySqlフォーマットが実現されています)
set @temp := '';
set @q := concat("select group_concat(concat(",@cns2,") separator \"'),('\")
from ",dn,".",@tn, " into @temp");
上記は最も重要なステートメントです テーブルからすべてのデータ行を単一の列の行として取得し、さらにこれらの行は'),('
で区切られてマージされます
5.1 concat(",@cns2,")
1つの列のすべての列の値を取得します。
5.2最も外側の連結後、@qは
@q = "select group_concat(`id`','`ename`','`,did` separator '),(' from
mydb.emp into @temp";
5.3:group_concatは、結合された列のすべての行を1つの値にマージします。列の値は@ cns2に存在するセパレーターを介して結合され、行レベルの結合は'),('
で行われます。
prepare s1 from @q;
execute s1;deallocate prepare s1;
set @res = concat(@res,@temp,");");
@qが実行されます
set @res = concat(@res,@temp,");");
6:そして
として結果を取得します 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
そして@res = concat(@res,@temp,");");
の後 取得します
insert into emp(`id`,`ename`,`did`) values ('1','e1','4'),('2','e2','4'),
('3','e3','2'),('4','e4','4'),('5','e5','3);