左连接以查找具有不同id的两个表之间的差异

时间:2017-11-03 16:25:59

标签: mysql

我有两个mysql表:table_oldtable_new,两个都有列:

name, 
surname, 
birthdate 
birthplace

加上其他信息列。两者都有id列,表格之间不匹配。一些记录在表之间随时间变化,现在我需要有一个第三个表,其中包含在表之间更改(添加或删除)的记录。

所以我需要将表与namesurname以及birthdatebirthplace进行比较。

我认为我必须使用左连接,但我不确定是否有语法。有什么帮助吗?

1 个答案:

答案 0 :(得分:3)

MySQL实际上并不支持正式的OUTER JOIN操作,但我们可以使用两个联接的联合来模拟一个。使用完全外部联接来包含来自两个表的记录,这些记录与另一个表中的任何内容都不匹配:

SELECT t1.*, 'table one' AS missing
FROM table_old t1
LEFT JOIN table_new t2
    ON t1.name = t2.name           AND
       t1.surname = t2.surname     AND
       t1.birthdate = t2.birthdate AND
       t1.birthplace = t2.birthplace
WHERE t2.name IS NULL
UNION ALL
SELECT t2.*, 'table two'
FROM table_old t1
RIGHT JOIN table_new t2
    ON t1.name = t2.name           AND
       t1.surname = t2.surname     AND
       t1.birthdate = t2.birthdate AND
       t1.birthplace = t2.birthplace
WHERE t1.name IS NULL;

我声称记录已过期的标准是任何一个字段都不匹配。也就是说,如果三个字段一致,但一个不同意,那么我不认为它是一个匹配。

按照以下链接进行正在运行的演示。您可以优化我的答案,并且可以更容易地将逻辑上相同的记录组分组在一起,但这需要更多的工作。

Demo