问题
昨天同学问了我个问题
我想写个sql脚本,循环插入数据,数据是另一个表中的a.b字段
A表中的a.b字段数据,循环加入B表中a.b字段.就是这个意思
我问他为什么不用Java写,他说是数据维护,只能用SQL脚本,问a b表通过什么关联嘛?他回答:
没有,B表就是个新建立的关系表,B表不用在乎关系,现在是个空表,还没有数据。只需要把A表中的数据给放过去就行
他一说B表是个关系表我就知道是要干什么了
解决办法
INSERT INTO b(字段1 ,字段2) SELECT 字段1,字段2 FROM a;
误点
他下意识的在查询之前加了个values,结果报错了,我跟他说这个语法没有values,他表示很震惊
把聊天记录发给我两个小徒儿,发现他们也都不知道insert into 后面能直接加查询语句不需要加values,其实这就是复制旧表数据到新表的原理
理解
其实之前我自己就因为要复制一个表的数据到新表里面,所以对这有点了解
我一般会把这拆开来,先写查询语句,再在前面加一个insert into 要新增的字段 表,这样,就绝对不会有什么问题了,能做到查到什么就新增什么,想要新增什么就查什么。
这种写法想要新增加一个关系表的话,就直接先连表查询,然后再在前面加一个新增语句就行啦
-- 第二步,再在前面加上要新增到哪个表个什么字段,字段的数量和对应的值要对应
insert into student_score(`student_id`,`score_id`)
-- 第一步,先查询出来要新增的所有数据
select a.name,c.id from student a left join score c on a.classNo = c.id