比较同一MySQL数据库表的两个版本的数据

时间:2016-03-16 20:54:11

标签: mysql

我有两个MySQL表,它们具有完全相同的结构和大多数相同的数据。两者之间的某些行会有所不同,因为我的客户更新了旧网站而不是新网站。有上百个记录,并且上一个修改日期没有列。我在localhost上创建了一个新数据库并导入了旧表和新表。需要比较所有数据行,并且需要返回旧数据库和新数据库之间的差异。一旦识别出差异,是否有办法轻松地将更新的数据从旧表迁移到新表?我是一名MySQL新手,但我通常会在问题上遇到麻烦。在此先感谢您的帮助。

我一直在查看以下代码,但我不确定它是否是最佳答案。

SELECT *,'table_1' AS o FROM table_1
UNION
SELECT *,'table_2' AS o FROM table_2
WHERE some_id IN (
    SELECT some_id
    FROM (
        SELECT * FROM table_1
        UNION
        SELECT * FROM table_2
    ) AS x
    GROUP BY some_id
    HAVING COUNT(*) > 1
 )
 ORDER BY some_id, o;

2 个答案:

答案 0 :(得分:0)

这应该可以解决问题。您正在查找所有行的主键,其中where子句中使用的子选择中的每个表的每个值都相同。然后,您可以从联合结果集中排除包含这些主键的行。现在你如何协调差异是一个完全不同的故事:)

SELECT * FROM (
    SELECT *, 'table 1' FROM table_1
    UNION ALL
    SELECT *, 'table 2' FROM table_2
) AS combined
WHERE combined.primary_key_field
NOT IN (
    SELECT t1.primary_key_field
    FROM table_1 AS t1
    INNER JOIN table_2 AS t2
    ON t1.primary_key_field = t2.primary_key_field
    AND t1.some_other_field = t2.some_other_field
    AND ... /* join on all fields in tables */
)

答案 1 :(得分:0)

insert into select单个查询即可。

insert into table_new
select * from table_old
where some_id NOT IN (select some_id from table_new)