常用的四种情况,用表A ,表B 来演示。目标表为B 表,来源表为A 表
1.如果两个表的字段一致,并且要求插入全表。
insert into 目标表 select * from 来源表;
insert into testB select * from testA
2.如果仅仅想插入相同字段的值。
insert into 目标表 (字段1,字段2) select 字段1,字段2 from 来源表;
insert into testB ( name,class) select name,class from testA;
3.如果导入目标表不存在的记录。
INSERTINTO 目标表 (字段1, 字段2, ...) SELECT字段1, 字段2, ... FROM来源表
WHERE not exists (select * from目标表 where 目标表.比较字段 =来源表.比较字段);
insert into testB (name,class) where name,type from testA where not exists (select *
from testB.class = testA.name)
4.如果导入目标表中,想自己设置某个字段的值。
INSERT INTO 目标表 (目标字段1,目标字段2,字段1, 字段2,...)select 目标字段1,目标字段2,字段1, 字段2,... FROM来源表
目标字段1,目标字段2:这是目标表比来源表多出的字段
INSERT INTO testB(name,type,address) SELECT name,status,'2019-12' FROM
testA WHERE NOT EXISTS (SELECT * FROM testB WHERE testB.type=testA.`status`)
总结:即可以向一个表中查询不存在的列名,这里不存在的列名必须是实际值或占位符,不能是变量.(这里占位符实质上是个字符串)
如果是变量则查询的是表A中的字段。但是表A中没有该字段,所以会报错。