2010-07-19 70 views
3

比方說,比如:來自不同表合併兩列在一起

  • 我有兩個表:OLD_DATANEW_DATA

  • 兩個OLD_DATANEW_DATA有一列稱爲this_is_col

  • 兩個OLD_DATANEW_DATA有日期(2010-02-06,2010-01-09,2007-06-02等)的行不同(數百個)。兩個表格不一定具有相同的日期,但它們都具有相同的格式。

  • 這兩個表的字段是各種整數。


我的任務:

  • 複製從領域OLD_DATANEW_DATA

  • 如果兩個表中都存在日期,則將替換new_data中的字段。

  • 如果日期不存在new_data,那麼將添加正確的行並將該字段複製。


這是多遠我已經得到了:

創建一個臨時列:

ALTER TABLE `new_data` ADD `tempColumn` TEXT NULL; 

複製了數據從OLD_DATA

INSERT INTO `new_data` (`tempColumn`) SELECT `this_is_col` FROM `old_data`; 

聯合臨時柱和new_datathis_is_col。 (我還沒有真正想到這一步,因爲我沒有得到這麼多)。

MERGE? `tempColumn` `this_is_col`; 

刪除臨時表

ALTER TABLE `new_data` DROP `tempColumn`; 

在(通過將數據傳輸至臨時列)執行第二個動作我得到這個錯誤:

#1062 - Duplicate entry '0000-00-00' for key 1

而且現在我卡住了。任何幫助,將不勝感激。我使用MySQL和phpMyAdmin來測試SQL命令。

回答

3

假設你的日期索引爲唯一的密鑰:

INSERT INTO newtable 
SELECT * 
FROM oldtable 
ON DUPLICATE KEY column1=oldcolumn1, ... 
+0

+1對於一個清楚動手的例子。 – 2011-01-12 11:10:28

0

如何做一個UPDATEINSERT

UPDATE new_data SET col=col 
FROM new_data a join old_data b on a.this_is_col = b.this_is_col 

然後

​​

除非我誤解...

0

如果你寧願先刪除該行,而不是更新:REPLACE

它也只是一行,所以:REPLACE數據SELECT,你不需要添加文本列來添加奇怪。

相關問題