如何在MySQL中将数据从一个表复制到另一个新表?

184

我想在MySQL中将数据从一个表复制到另一个表。

表1(现有表):

aid    
st_id
from_uid
to_gid
to_uid
created
changed
subject
message
link

表2(新表)

st_id
uid
changed
status
assign_status

我想把TABLE 1中的一些数据字段复制到TABLE 2中。

是否可以使用MySQL查询完成这个操作?


2
这是一次性的工作还是您计划定期进行? - jdias
1
@@jdias: 到目前为止,这只是一次性的工作。 - Fero
@jdias 为了澄清,如果这不是一次性的工作,MySQL 新手应该考虑做什么? - Seanny123
1
可能是为了避免重复数据而使用视图。 - James Bradbury
可能是[将数据复制到另一个表中]的重复问题(https://dev59.com/UmYr5IYBdhLWcg3w---U)。 - Marcus Vinicius Melo
13个回答

343

这将实现你想要的功能:

INSERT INTO table2 (st_id,uid,changed,status,assign_status)
SELECT st_id,from_uid,now(),'Pending','Assigned'
FROM table1
如果您想从table1中包含所有行,则无需添加任何条件语句。否则,如果您只想添加table1的子集,则可以在最后添加一个“WHERE”语句。

太好了,很高兴看到这与我在T-SQL中所使用的相同。 - jpierson
如果您想复制所有的table1数据,那么在复制之前必须创建一个新的table2。@SANDEEP - Sachin from Pune

103

如果您不想列出字段,而且表的结构相同,可以这样做:

INSERT INTO `table2` SELECT * FROM `table1`;

或者如果你想要创建一个具有相同结构的新表:

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl;

插入选择的参考; 创建表选择的参考


3
为什么[AS]在方括号中,AS在这里做什么? 答:方括号中的[AS]表示缩写或简称。在这个上下文中,AS是某个实体、组织或公司的缩写或简称,但具体指代什么需要根据上下文判断。 - Kasun Siyambalapitiya
3
“可选”指这个单词是非强制的。它被写成这样是因为我从文档中复制粘贴过来,没有添加任何内容。 我认为在其他 SQL 方言中,“AS” 是必需的。 - Bryan
1
括号应该被移除以使其执行任务。 - umekalu

22

你可以轻松地从另一个表中获取数据。您只需添加所需的字段即可。

MySQL查询如下:

INSERT INTO table_name1(fields you want)
  SELECT fields you want FROM table_name2


其中,这些值是从table2复制到table1的


20
CREATE TABLE newTable LIKE oldTable;

然后,将数据复制过去

INSERT INTO newTable SELECT * FROM oldTable;

4

1
直观 :) 我喜欢它。这是一个普通的SELECT语句,前面加上一行"INSERT INTO"。 - Haitham Sweilem

3
INSERT INTO Table1(Column1,Column2..) SELECT Column1,Column2.. FROM Table2 [WHERE <condition>]

3
虽然这段代码可能回答了问题,但更好的方式是解释它如何解决问题以及为什么要使用它。仅代码的回答在长期内是没有用的。 - Tobias Liefke

3

1
不起作用。根据文档,“MySQL服务器不支持SELECT ... INTO TABLE Sybase SQL扩展”。 - Bryan

2

首先需要创建table2。

插入数据到table2中(field1, field2,...),
从table1中选择相应的字段(field1, field2,...)
满足特定条件(where condition);

0
你可以尝试这段代码。
insert into #temp 
select Product_ID,Max(Grand_Total) AS 'Sales_Amt', Max(Rec_Amount) ,'',''
from Table_Name group by Id

0

上述查询仅在我们创建了与客户匹配的列的客户表时才起作用

INSERT INTO clients(c_id,name,address)SELECT c_id,name,address FROM customer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接