mysql中insert into select from的使用

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

1 INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM db2_name

当然,上面的语句比较适合两个表的数据互插,如果多个表就不适应了。对于多个表,我们可以先将需要查询的字段join起来,然后组成一个视图后再select from就可以了:

1 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的形式来组合字段。需要注意的是嵌套查询部分最后一定要有设置表别名,如下:

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

即最后的as tb是必须的(当然tb这个名称可以随意取),即指定一个别名,否则在mysql中会报如下错误:

1 ERROR 1248 (42000): Every derived TABLE must have its own alias

即每个派生出来的新表都必须指定别名才可以的。

  转:http://blog.csdn.net/fuxuejun/article/details/6277169

时间: 2024-10-13 02:31:02

mysql中insert into select from的使用的相关文章

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,

mysql中insert与select的嵌套使用

如何在mysql从多个表中组合字段然后插入到一个新表中,通过一条sql语句实现.具体情形是:有三张表a.b.c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段.对于这种情况,我们可以使用如下的语句来实现: INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM db2_name 当然,上面的语句比较适合两个表的数据互插,如果多个表就不适应了.对于多个表,我们可以先将需要查询的字段join起来,然后组成一个视图后再

[转] mysql中insert into select和create select用法

在mysql中可以把已经存在的表直接通过命令复制为另一个表 方法1:create table mmm select * from bbb; 注意:这条命令要求mmm这个表在数据库中不存在这条命令可以创建新表mmm并且bbb中的表结构以及数据和mmm完全一样,也可以导出部分字段 create table mmm select 字段1,字段2 from bbb; 方法2:insert into mmm select * bbb; 这条语句和上一条语句实现同样的功能,只是要求mmm表必须在数据库中存在

Oracle中insert into select和select into的用法(转)

原文地址:http://hi.baidu.com/huahua035/item/87d5e71e6a7d31f187ad4ea5 两张表进行数据的拷贝,最常用的拷贝语句是: insert into select  和 select into from 但是请绝对的注意: 在Oracle中select into from不可以使用-----原因很简单:select into是PL/SQL language 的赋值语句!如果使用则Oracle会抛出0RA-00905:missing keyword的

MYSQL中insert into和replace into以及insert ignore的区别

mysql中常用的三种插入数据的语句: insert into表示插入数据,数据库会检查主键(PrimaryKey),如果出现重复会报错: replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样: REPLACE语句会返回一个数,来指示受影响的行的数目.该数是被删除和被插入的行数的和.如果对于一个单行REPLACE该数为1,则一行被插入,同时没有行被删除.如果该数大

MySQL中如何实现select top n ----Limit

用惯了access mssql server的朋友,可能在用mysql查询前N条记录时,习惯的使用select top n 形式的语句,在这里说明一下,mysql没有此语法,mysql用limit来实现相关功能,而且功能更加强大,GOOD.以下是limit在mysql中的使用详解: 语法: 1 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数.LIMIT

MySQL中如何实现select top n

用惯了access mssql server的朋友,可能在用mysql查询前N条记录时,习惯的使用select top n 形式的语句,在这里说明一下,mysql没有此语法,mysql用limit来实现相关功能,而且功能更加强大,GOOD.以下是limit在mysql中的使用详解: 语法:SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offsetLIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数.LIMIT 接受一个

mysql中常用的select语句记录

1:带条件查询,查询ID=2的数据 SELECT * FROM table WHERE ID = 2 2:查询前几条数据,如查询前2条数据 SELECT * FROM table LIMIT 2

MYSQL中LIMIT用法

MYSQL中LIMIT用法 SELECT * FROM tableName LIMIT [offset,] rows; 1.select * from table limit m,n(显示条数) 其中m是指记录开始的索引index(索引是从0开始的表示第一条记录 ) n是指从第m+1条开始,取n条. 结果是检索记录第m+1行至(m+n)行记录,共取出n条记录 ex: SELECT * FROM 表名 limit 6,5; 结果:检索记录第7行至11行记录,共取出5条记录. 2.n可以被设置为-1