【问题标题】:MySQL - merge two tables - with conditionMySQL - 合并两个表 - 有条件
【发布时间】:2016-08-22 14:30:59
【问题描述】:

我想将 2 个看起来像这样的表合并到一个表中,并为重复的键行在合并表中添加最旧的 DateAdded 值。

(Key1,Key2)PRIMARY KEY

+-----------+-----------+------+-----+-------------------+-----------------------------+
| Field     | Type      | Null | Key | Default           | Extra                       |
+-----------+-----------+------+-----+-------------------+-----------------------------+
| Key1      | int(10)   | NO   | PRI |                   |                             |
| Key2      | int(10)   | NO   | PRI |                   |                             |
| DateAdded | DATETIME  | NO   |     |                   |                             |
+-----------+-----------+------+-----+-------------------+-----------------------------+

【问题讨论】:

    标签: mysql merge


    【解决方案1】:

    根据您的具体情况随意更改表名:

    INSERT INTO table_merged (Key1, Key2, dateAdded)
    SELECT Key1, Key2, MIN(dateAdded) dateAdded
    FROM (
        SELECT Key1, Key2, dateAdded
        FROM table1
        UNION ALL
        SELECT Key1, Key2, dateAdded
        FROM table2
      ) a
    GROUP BY Key1, Key2  
    

    更新: 或者,这也应该有效:

    INSERT INTO table_merged (Key1, Key2, dateAdded)
    SELECT Key1, Key2, dateAdded
    FROM table1
    ON DUPLICATE KEY UPDATE
      dateAdded = CASE WHEN VALUES(dateAdded) < dateAdded THEN VALUES(dateAdded) ELSE dateAdded END;
    
    INSERT INTO table_merged (Key1, Key2, dateAdded)
    SELECT Key1, Key2, dateAdded
    FROM table2
    ON DUPLICATE KEY UPDATE
      dateAdded = CASE WHEN VALUES(dateAdded) < dateAdded THEN VALUES(dateAdded) ELSE dateAdded END;
    

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      相关资源
      最近更新 更多