2011-09-20 130 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; 
相關問題