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


143

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

表1(现有表):

aid    
st_id
from_uid
to_gid
to_uid
created
changed
subject
message
link

表2(新表)

st_id
uid
changed
status
assign_status

我想将一些数据字段从表1复制到表2。

可以使用MySQL查询完成吗?


1
这是一次工作还是您打算定期做?
jdias

@@ jdias:到目前为止,这是一次工作
Fero

@jdias要澄清的是,如果不是一项一次性工作,那么MySQL noob应该怎么做呢?
Seanny123

1
可能是视图,以避免重复数据。
詹姆斯·布拉德伯里

Answers:


280

这将做您想要的:

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

1
喜欢MySQL的另一个原因,非常直观!
pepseps

如果要复制所有table1数据,则必须在复制@SANDEEP
Sachin from Pune

77

如果您不想列出字段,并且表的结构相同,则可以执行以下操作:

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

或者如果您想创建具有相同结构的新表:

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl;

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


2
为什么[AS]放在方括号中,AS在这里做什么
Kasun Siyambalapitiya '16

3
它表示该词是可选的。这样写是因为我是从文档中复制并粘贴的。它不添加任何东西。我认为AS在其他SQL方言中这是必需的。
布赖恩

22

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

mysql查询是:

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


其中,值从table2复制到table1





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

2
尽管此代码可以回答问题,但最好解释一下它如何解决问题以及为什么使用它。从长远来看,纯代码答案没有用。
Tobias Liefke

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

0

您应该首先创建table2。

插入到table2(field1,field2,...)
选择field1,field2,....
来自表1
条件

0

如果该表存在。您可以尝试插入table_name中,选择* from old_tale;

如果该表不存在。您应该尝试创建表table_name,例如old_table; 插入table_name选择* from old_tale;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.