2010-07-19 67 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,你不需要添加文本列来添加奇怪。

相关问题