通過一條sql語句實(shí)現(xiàn)。具體情形是:有三張表a、b、c,現(xiàn)在需要從表b和表c中分別查幾個字段的值插入到表a中對應(yīng)的字段。對于這種情況,可以使用如下的語句來實(shí)現(xiàn):
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),滕州企業(yè)網(wǎng)站建設(shè),滕州品牌網(wǎng)站建設(shè),網(wǎng)站定制,滕州網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,滕州網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM db2_name
當(dāng)然,上面的語句比較適合兩個表的數(shù)據(jù)互插,如果多個表就不適應(yīng)了。對于多個表,可以先將需要查詢的字段join起來,然后組成一個視圖后再select from就可以了:
INSERT INTO a(field1,field2) SELECT * FROM(SELECT f1,f2 FROM b JOIN c) AS tb
其中f1是表b的字段,f2是表c的字段,通過join查詢就將分別來自表b和表c的字段進(jìn)行了組合,然后再通過select嵌套查詢插入到表a中,這樣就滿足了這個場景了,如果需要不止2個表,那么可以多個join的形式來組合字段。需要注意的是嵌套查詢部分最后一定要有設(shè)置表別名,如下:
SELECT * FROM(SELECT f1,f2 FROM b JOIN c) AS tb
即最后的as tb是必須的(當(dāng)然tb這個名稱可以隨意?。粗付ㄒ粋€別名,否則在mysql中會報如下錯誤:
ERROR 1248 (42000): Every derived TABLE must have its own alias
即每個派生出來的新表都必須指定別名才可以的。
delimiter $$// 定義結(jié)束符為 $$
drop procedure if exists wk; // 刪除 已有的 存儲過程
create procedure wk()// 創(chuàng)建新的存儲過程
begin
declare i int;// 變量聲明
set i = 1;
while i 11 do // 循環(huán)體
insert into user_profile (uid) values (i);
set i = i +1;
end while;
end $$ // 結(jié)束定義語句
// 調(diào)用
delimiter ;// 先把結(jié)束符 回復(fù)為;
call wk();
delimter : mysql 默認(rèn)的 delimiter是; 告訴mysql解釋器,該段命令是否已經(jīng)結(jié)束了,mysql是否可以執(zhí)行了。
delimiter $$
mysql
mysql CREATE PROCEDURE myProc() //創(chuàng)建while循環(huán)的存儲過程 if分支語句示例
- BEGIN
-
- DECLARE i int;
- SET i=1;
- loop1: WHILE i=10 DO
- IF MOD(i,2)0 THEN /*Even number - try again*/
- SELECT CONCAT(i," is an odd number");
- END IF;
- SET i=i+1;
- END WHILE loop1;
- END$$
Query OK, 0 rows affected (0.00 sec)
這種也可以