2011-09-20 131 views
99

我想在MySQL中将数据从一个表复制到另一个表。如何将数据从一个表复制到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

+0

@@ jdias:直到现在,它只是一次性工作。 – Fero

+0

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

回答

187

这会做你想要什么:

INSERT INTO table2 (st_id,uid,changed,status,assign_status) 
SELECT st_id,from_uid,now(),'Pending','Assigned' 
FROM table1 

如果你想包括表1中的所有行。否则,如果您只想添加table1的子集,则可以将WHERE语句添加到最后。

我希望这会有所帮助。

+0

它不工作... – SANDEEP

+0

很高兴看到这和我在T-SQL中习惯的一样。 – jpierson

+0

多一个爱MySQL的理由,非常直观! – peceps

2
SELECT * 
INTO newtable [IN externaldb] 
FROM table1; 

http://www.w3schools.com/sql/sql_select_into.asp

+0

不起作用。根据[文档](http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-select-into-table.html),“MySQL服务器不支持SELECT ... INTO TABLE Sybase SQL扩展“ – Bryan

18

你可以很容易地从另一个表中获取数据。你只需要添加字段。

MySQL查询是:

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


其中,该值从表2复制到表1

49

如果你不想列表中的字段,以及表的结构是同样的,你可以这样做:

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

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

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl; 

Reference for insert select;如果我们已经创建了客户表与客户的匹配列

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

为什么'[AS]'在方括号中,这里由'AS'完成 –

+1

它表示该单词是可选的。它是这样写的,因为我复制并粘贴了文档;它不会添加任何东西。 我认为'AS'在其他SQL方言中是强制性的。 – Bryan

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

虽然这段代码可能会回答这个问题,但最好解释它如何解决问题以及为什么要使用它。从长远来看,仅有代码的答案是没有用的。 –

0

上面的查询只能你可以试试这个代码

insert into #temp 
select Product_ID,Max(Grand_Total) AS 'Sales_Amt', Max(Rec_Amount) ,'','' 
from Table_Name group by Id 
3
CREATE TABLE newTable LIKE oldTable; 

随后,向数据超过

INSERT INTO newTable SELECT * FROM oldTable; 
相关问题