【问题标题】:Combine two columns together from separate tables将不同表中的两列组合在一起
【发布时间】:2010-07-19 21:20:25
【问题描述】:

比如说:

  • 我有两个表:old_datanew_data

  • old_datanew_data 都有一个名为 this_is_col 的列。

  • old_datanew_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_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 命令。

【问题讨论】:

    标签: sql mysql mysql-error-1062


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          只做一个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)
          

          除非我误解了……

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-03-15
            • 2020-01-27
            • 1970-01-01
            • 2021-09-08
            • 2023-02-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多