mysql將一個表的數據導入到另一個表
https://blog.csdn.net/qq_33697774/article/details/118698380
將一個表的數據插入到另外一個表中的幾種情況如下:
微信掃一掃關注我
1.如果2張表的字段一致,並且希望插入全部數據,可以用這種方法:
INSERT INTO 目標表 SELECT * FROM 來源表;
例如:insert into insertTest select * frominsertTest2;
2.如果只希望導入指定字段,可以用這種方法:
INSERT INTO 目標表 (字段1, 字段2, ...) SELECT 字段1, 字段2,... FROM 來源表;(這里的話字段必須保持一致)
例如:insert into insertTest2(id,name) select id,name from insertTest2;
注意:如果目標表與來源表主鍵值相同則會出現添加錯誤,主鍵值不同才能插入
3.如果您需要只導入目標表中不存在的記錄,可以使用這種方法:
INSERTINTO 目標表 (字段1, 字段2, ...) SELECT字段1, 字段2, ... FROM來源表
WHERE not exists (select * from目標表 where 目標表.比較字段 =來源表.比較字段);
例如:
1>.插入多條記錄:
insert intoinsertTest2(id,name)select id,name frominsertTest
where not exists (select * frominsertTest2 whereinsertTest2.id=insertTest.id);
2>.插入一條記錄:
insert intoinsertTest (id, name) SELECT 100,'liudehua' FROMdual
WHERE notexists (select * from insertTest whereinsertTest.id = 100);
4、如果需要導入的目標表字段比來源表的字段多,將來源表的數據導入再加上幾個字段組成目標表 的數據
INSERT INTO 目標表 (目標字段1,目標字段2,字段1, 字段2,...)
select 目標字段1,目標字段2, 字段1, 字段2,... FROM來源表
目標字段1,目標字段2:這是目標表比來源表多出的字段
例如:
insert into insertTest2(目標字段1,目標字段2,id,name) select 目標字段1,
目標字段2, id,name from insertTest whereinsertTest2.id=insertTest.id;
目標字段1,目標字段2:可以先設占位符,在設置值。也可以直接在語句中賦值
insert into insertTest2(目標字段1,目標字段2,id,name) select a1,
a2, id,name from insertTest whereinsertTest2.id=insertTest.id;
5、對上述4的解析
select a1, a2, id,name from insertTest
這里在表 insertTest里本身沒有a1,a2兩個字段名,當使用這個查詢語句時,會查 出 insertTest表的所有字段值,並在表數據的前面加上了列名為a1,a2的字段,並且列名為a1的值全為a1,列名為a2的值全為a2,並且a1,a2不能為變量,如果是變量,sql語句會把它當做表字段,而表中不存在這個字段,會報錯
總結:即可以向一個表中查詢不存在的列名,這里不存在的列名必須是實際值或占位符,不能是變量
微信掃一掃關注我