首页 > 技术文章 > mysql中insert into select from的使用

xiufengchen 2019-05-12 11:53 原文

如何在mysql从多个表中组合字段然后插入到一个新表中,通过一条sql语句实现。具体情形是:有三张表a、b、c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段。对于这种情况,我们可以使用如下的语句来实现:

例如:

两种表结构一样:

所以需要将user表数据同步到T-user中使用语句:

INSERT INTO t_user SELECT * FROM USER  就可以了

可以看出已经同步了,如果两个表结构不一样呢:

例如:

CREATE TABLE `tr_user` (
  `sname` varchar(255) DEFAULT NULL,
  `sage` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `user` (
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

执行语句为:

 

INSERT INTO tr_user (sname, sage) 
SELECT 
  NAME AS sname,
  age AS sage 
FROM
  USER 
INSERT INTO tr_user (sname, sage) 
SELECT 
  NAME ,
  age  
FROM
  USER 
  `tr_user`

第二种也是可以的

如果是多表呢:

就需要新建一个试图来进行:

     INSERT INTO a(field1,field2) SELECT * FROM(SELECT f1,f2 FROM b JOIN c) AS tb     


其中f1是表b的字段,f2是表c的字段,通过join查询就将分别来自表b和表c的字段进行了组合,然后再通过select嵌套查询插入到表a中,
这样就满足了我们这个场景了,如果需要不止2个表,那么可以多个join的形式来组合字段。需要注意的是嵌套查询部分最后一定要有设置表别名

 

推荐阅读