我有两个mysql表:table_old
和table_new
,两个都有列:
name,
surname,
birthdate
birthplace
加上其他信息列。两者都有id
列,表格之间不匹配。一些记录在表之间随时间变化,现在我需要有一个第三个表,其中包含在表之间更改(添加或删除)的记录。
所以我需要将表与name
和surname
以及birthdate
和birthplace
进行比较。
我认为我必须使用左连接,但我不确定是否有语法。有什么帮助吗?
答案 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;
我声称记录已过期的标准是任何一个字段都不匹配。也就是说,如果三个字段一致,但一个不同意,那么我不认为它是一个匹配。
按照以下链接进行正在运行的演示。您可以优化我的答案,并且可以更容易地将逻辑上相同的记录组分组在一起,但这需要更多的工作。