您好,登錄后才能下訂單哦!
本文主要給大家簡單講講mysql如何操作相同類型多張表提取到一張表,相關(guān)專業(yè)術(shù)語大家可以上網(wǎng)查查或者找一些相關(guān)書籍補(bǔ)充一下,這里就不涉獵了,我們就直奔主題吧,希望mysql如何操作相同類型多張表提取到一張表這篇文章可以給大家?guī)硪恍?shí)際幫助。
有時候需要從多張相同類型的表中提取數(shù)據(jù),這些表有一些相同的列或者表結(jié)構(gòu)完全相同,同時表名存在一定的規(guī)律,如果表數(shù)量少還好,如果表數(shù)量多的話則會比較繁瑣。可以通過存儲過程將多張表的數(shù)據(jù)提取到一張表的方法來降低工作量。
先創(chuàng)建測試表并生成測試數(shù)據(jù)。
以下存儲過程創(chuàng)建10張測試表,每張表生成10條測試數(shù)據(jù)。
drop PROCEDURE if EXISTS create10tables;
create PROCEDURE create10tables()
BEGIN
DECLARE t_name VARCHAR(32);
DECLARE i INT;
DECLARE j INT;
DECLARE continue HANDLER for not found set t_name = "";
set i = 0;
set j = 0;
create_loop:LOOP
set i = i + 1;
set t_name = CONCAT("ttest",i);
set @dropsql = CONCAT('drop table if EXISTS ',t_name);
#select @dropsql;
prepare dropsql from @dropsql;
EXECUTE dropsql;
DEALLOCATE prepare dropsql;
set @createsql = concat('create table ',t_name,' (id int(11) not null auto_increment,modifytime timestamp null default current_timestamp,vdata varchar(32) ,primary key(id));');
#select @createsql;
prepare createsql from @createsql;
EXECUTE createsql;
DEALLOCATE prepare createsql;
insert_loop:LOOP
set j = j+1;
if j > 10 THEN
LEAVE insert_loop;
end if;
set @insertsql = concat('insert into ',t_name,'(vdata) values(md5(rand()));');
#select @insertsql;
PREPARE insertsql from @insertsql;
EXECUTE insertsql;
deallocate PREPARE insertsql;
end LOOP insert_loop;
set j = 0;
if i > 10 THEN
LEAVE create_loop;
end if;
end LOOP create_loop;
END;
#執(zhí)行create10tables 生成表與數(shù)據(jù)
call create10tables();
有了表和數(shù)據(jù),可以在information_schema數(shù)據(jù)庫的innodb_tables表中看到新生成的對應(yīng)的表名。這里可以通過該表將所有的表名查出來,然后進(jìn)行數(shù)據(jù)提取。SQL如下:
drop PROCEDURE if exists selectalldata;
drop table if exists t_test;
create PROCEDURE selectalldata()
BEGIN
DECLARE done int DEFAULT FALSE;
DECLARE t_name VARCHAR(32);
declare i int;
DECLARE cur1 CURSOR for SELECT table_name from information_schema.TABLES where table_name like "ttest%";
DECLARE continue HANDLER for not found set done = TRUE;
open cur1;
set i = 0;
read_loop:LOOP
fetch cur1 into t_name;
if done THEN
LEAVE read_loop;
end if;
if i = 0 THEN
set @createsql = concat('create table t_test (id int(11) not null auto_increment,modifytime timestamp null default current_timestamp,vdata varchar(32) ,primary key(id));');
#select @createsql;
prepare createsql from @createsql;
EXECUTE createsql;
DEALLOCATE prepare createsql;
set i = i + 1;
end if;
set @insertsql = concat('insert into t_test(modifytime,vdata) select modifytime,vdata from ',t_name);
prepare insertsql from @insertsql;
EXECUTE insertsql;
DEALLOCATE prepare insertsql;
end LOOP;
close cur1;
END;
#執(zhí)行selectdata
call selectalldata();
執(zhí)行之后可以在t_test表中看到已經(jīng)將所有的數(shù)據(jù)都提取出來了。
實(shí)際操作中,根據(jù)需要修改對應(yīng)的SQL語句即可。
mysql如何操作相同類型多張表提取到一張表就先給大家講到這里,對于其它相關(guān)問題大家想要了解的可以持續(xù)關(guān)注我們的行業(yè)資訊。我們的板塊內(nèi)容每天都會捕捉一些行業(yè)新聞及專業(yè)知識分享給大家的。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。