解析MySQL中INSERT INTO SELECT的使用

 更新时间:2013年07月02日 12:04:01   作者:  
本篇文章是对MySQL中INSERT INTO SELECT的使用进行了详细的分析介绍,需要的朋友参考下

1. 语法介绍
有三张表a、b、c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段。对于这种情况,可以使用如下的语句来实现:
INSERT INTO db1_name (field1,field2) SELECT field1,field2 FROM db2_name
 
上面的语句比较适合两个表的数据互插,如果多个表就不适应了。对于多个表,可以先将需要查询的字段JOIN起来,然后组成一个视图后再SELECT FROM就可以了:

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

其中f1是表b的字段,f2是表c的字段,通过JOIN查询就将分别来自表b和表c的字段进行了组合,然后再通过SELECT嵌套查询插入到表a中,这样就满足了这个场景了,如果需要不止2个表,那么可以多个JOIN的形式来组合字段。

2. 语法错误注意
需要注意的是嵌套查询部分最后一定要有设置表别名,如下:

SELECT * FROM (SELECT f1,f2 FROM b JOIN c) AS tb

即最后的AS tb是必须的(tb这个名称可以随意取),即指定一个别名。每个派生出来的新表都必须指定别名,否则在mysql中会报如下错误:

ERROR 1248 (42000): Every derived TABLE must have its own alias
 
另外,MySQL中INSERT INTO SELECT不能加VALUES,即不能写成如下形式:

INSERT INTO db1_name(field1,field2) VALUES SELECT field1,field2 FROM db2_name
 
否则也会报错:You have an error in your SQL syntax

相关文章

  • Mysql主从同步Last_IO_Errno:1236错误解决方法

    Mysql主从同步Last_IO_Errno:1236错误解决方法

    最近遇到Mysql主从同步的Last_IO_Errno:1236错误问题,然后在网上查找相关解决方案,这里分享给大家,供参考。
    2017-10-10
  • mysql数据迁移之data目录复制方法

    mysql数据迁移之data目录复制方法

    这篇文章主要给大家介绍了关于mysql数据迁移之data目录复制方法的相关资料,MySQL的data文件是存储数据库的核心文件,它包含了所有的表、索引、视图和其它相关的数据,通过复制这些文件,我们可以将一个MySQL数据库迁移到另一个地方,需要的朋友可以参考下
    2023-08-08
  • 数据库报错:Unknown column 'xxx' in 'where clause'问题的解决过程

    数据库报错:Unknown column 'xxx' in 

    但凡写过sql语句的人估计都曾经碰到过类似于Unknown column ‘xxx’ in ‘where clause’的问题,这篇文章主要给大家介绍了关于数据库报错:Unknown column 'xxx' in 'where clause'问题的解决过程,需要的朋友可以参考下
    2023-03-03
  • mysql 8.0.14 安装配置方法图文教程(通用)

    mysql 8.0.14 安装配置方法图文教程(通用)

    这篇文章主要为大家详细介绍了mysql 8.0.14 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • MySQL group by和order by如何一起使用

    MySQL group by和order by如何一起使用

    这篇文章主要介绍了MySQL group by和order by如何一起使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • MySQL中的排序函数field()实例详解

    MySQL中的排序函数field()实例详解

    这篇文章主要给大家介绍了关于MySQL中排序函数field()的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • 详谈innodb的锁(record,gap,Next-Key lock)

    详谈innodb的锁(record,gap,Next-Key lock)

    下面小编就为大家带来一篇详谈innodb的锁(record,gap,Next-Key lock)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • MySQL binlog日志清理的方案分享

    MySQL binlog日志清理的方案分享

    Binlog日志非常重要,但是占用的磁盘空间也很大,我们也需要定期的去清理二进制日志,在MySQL数据库中,提供了自动清理Binlog日志的参数,本文给大家详细介绍了MySQL binlog日志清理方案,需要的朋友可以参考下
    2024-01-01
  • Hibernate4在MySQL5.1以上版本创建表出错 type=InnDB

    Hibernate4在MySQL5.1以上版本创建表出错 type=InnDB

    本文主要介绍解决Hibernate4在MySQL5.1自动创建表出错的方法,简单实用,需要的朋友可以参考下。
    2016-05-05
  • Windows下MySQL服务启动常见的两种方式(适配5.7和8.0)

    Windows下MySQL服务启动常见的两种方式(适配5.7和8.0)

    本文主要介绍了Windows下MySQL服务启动常见的两种方式(适配5.7和8.0),文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07

最新评论