2016-05-31 73 views
0

我有兩個數據庫表。兩個表具有相同的結構。現在我想從舊錶中插入數據到新表,如果數據已經存在,它將更新舊數據,否則插入新數據。我想通過匹配一些列字段值來插入或更新數據。任何幫助?從舊錶插入數據到新表

+0

你已經嘗試了什麼?你在用什麼數據庫?你的DB的模式是什麼? – Lee

回答

0

您可以利用MySQL的ON DUPLICATE KEY UPDATE功能。從MySQL doc -

如果指定了對重複密鑰更新,和行插入該 會引起一個唯一索引或主鍵的重複值時,MySQL 執行舊行的更新。

因此,如果您在表中定義了按鍵,則可以使用此功能。例如,您的發言看起來就像 -

insert into target_table (col1, col2, ...) 
select col1, col2,... from source_table 
on duplicate key update 
    col1 = values(col1), 
    col2 = values(col2), 
+0

Bro是「ON DUPLICATE KEY UPDATE」只檢查唯一索引或主鍵?我還匹配一些列值(如id,fname,lname,email等) –

+0

您必須在這些列上創建至少一個UNIQUE索引,這些列使您的記錄唯一 – hashbrown

+0

我的表只有主鍵(id)獨特的索引和表格有一千個數據 –

0

最好的方法是你可以使用左外連接concept.That會很容易。

INSERT INTO table1 
    (col_1, col_2, col_3, col_4, col_5) values("","","","") 
SELECT 
    table2_col_1, 
    table2_col_2, 
    table2_col_3, 
    table2_col_4, 
    1 
FROM 
    table_2 AS t2 
LEFT OUTER JOIN 
    table1 AS t1 
ON 
    t1.col_1 = t2.table2_col_1; 

UPDATE table_2 
SET table2_col_1 = 'value'// here is the value that you need to implement 
WHERE t1.col_1=t2.table2_col_1;//here is your condition 
0

從你的問題,我明白你的table2並不那麼重要。 因此,您可以刪除整個表格2中存在的值,以便結構不會受到影響。完成後,您可以導出插入查詢以實現表格1中存在的值。

+0

兄弟我在舊錶中有大約500個數據,在新表中有數千個(舊的加上一些新的)數據,但是遺漏了舊錶中的一些數據。現在我想添加從舊桌子 –