Để lấy Dữ liệu của toàn bộ cơ sở dữ liệu - SqlFiddle Demo
Để nhận dữ liệu của một bảng duy nhất - - SqlFiddle Demo
Tôi đã đưa ra một giải pháp phức tạp nhưng có thể chấp nhận được. Nhưng cần cải thiện .
Đây là một thủ tục phức tạp với mã hóa phức tạp, đặc biệt là truy vấn tìm nạp tất cả các hàng của tất cả các cột vào một kết quả duy nhất bởi group_concat
và các định dạng có từ nối phức tạp.
Cần nó được đơn giản hóa, hiệu quả và hoạt động trong mọi tình huống.
Một số chi tiết về giải pháp của tôi :Sau đây là phần quan trọng, phần khác chỉ là điều kiện / Vòng lặp (Tôi không tiện với tài liệu, nó cần thời gian và đề xuất, ai đó có thể giúp tôi trong việc định dạng và cải thiện nó, xin lỗi vì bất kỳ sự bất tiện nào, tuy nhiên tôi sẽ rất vui nếu được giúp đỡ từ bạn và tôi)
Lưu ý:group_concat (yourColumn partition '--anySeparator--') đang hợp nhất tất cả các hàng trong cột của bạn thành một hàng sao cho Các hàng được phân tách bằng --anySeparator--
select group_concat(column_name separator '`,`') into @cns1 from
information_schema.columns where table_schema=dn and [email protected];
1:column_names được nhận dưới dạng một giá trị duy nhất được phân tách bằng
`,` => @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 được nhận dưới dạng một giá trị duy nhất được phân tách bằng
`','` => @cn2 = id`','`ename`','`did
set @cns1=concat("`",@cns1,"`"); set @cns2=concat("`",@cns2,"`");
3:Chữ cái còn thiếu (`) được đặt ở đầu và cuối tên cột
set @res=concat(@res," insert into ",@tn,"(",@cns1,") values ('");
4:Chỉ cần thực hiện chèn res= " insert into emp(
`id` ,
`ename` ,
Giá trị `did` ) values("
Ở đây bạn có thể thấy lý do tại sao tôi đặt dấu phân tách (Đã đạt được Định dạng MySql)
set @temp := '';
set @q := concat("select group_concat(concat(",@cns2,") separator \"'),('\")
from ",dn,".",@tn, " into @temp");
Trên đây là tuyên bố quan trọng nhất Nó lấy tất cả các hàng dữ liệu từ bảng dưới dạng các hàng của một cột và hơn nữa các hàng này được hợp nhất và được phân tách bằng '),('
5.1 concat(",@cns2,")
nhận giá trị của tất cả các cột trong một cột duy nhất.
5.2 Sau khi kết thúc bên ngoài nhất, bây giờ @q là
@q = "select group_concat(`id`','`ename`','`,did` separator '),(' from
mydb.emp into @temp";
5.3:group_concat sẽ hợp nhất tất cả các hàng của cột được kết hợp đó thành một giá trị. Các giá trị của cột sẽ được nối thông qua các dấu phân tách hiện có trong @ cns2 và tham gia cấp hàng sẽ bằng '),('
prepare s1 from @q;
execute s1;deallocate prepare s1;
set @res = concat(@res,@temp,");");
@q được thực thi
set @res = concat(@res,@temp,");");
6:Và chúng tôi sẽ nhận được kết quả là
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
Và sau @res = concat(@res,@temp,");");
chúng tôi nhận được
insert into emp(`id`,`ename`,`did`) values ('1','e1','4'),('2','e2','4'),
('3','e3','2'),('4','e4','4'),('5','e5','3);