我有两个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;
答案 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)