从单独的表中将两列组合在一起

时间:2010-07-19 21:20:26

标签: sql mysql mysql-error-1062

比如说:

  • 我有两张桌子: old_data new_data

  • old_data new_data 都有一列名为 this_is_col

  • old_data new_data 都有各种(数百)行日期(2010-02-06,2010-01-09,2007-06- 02等)。两个表都不一定具有相同的日期,但它们都具有相同的格式。

  • 两个表的字段都是各种整数。


我的任务:

  • 将字段从 old_data 复制到 new_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_data 。的 this_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命令。

4 个答案:

答案 0 :(得分:3)

假设您的日期被编入索引为唯一键:

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

答案 1 :(得分:0)

你想要INSERT ... ON DUPLICATE KEY UPDATE。您的解决方案已经满足您的任务的第1步和第3步,ON DUPLICATE KEY UPDATE将负责第2步。

答案 2 :(得分: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

然后

INSERT INTO new_data (cols) SELECT cols 
FROM old_data WHERE this_is_col NOT IN (SELECT this_is_col FROM new_data)

除非我误解了......

答案 3 :(得分:0)

如果您要先删除该行,而不是更新:REPLACE

它也只是一行,所以:REPLACE数据SELECT,您不必通过添加文本列来做奇怪的事情。