我正在尝试比较 2 个 mySQL 表以找出它们之间的差异。一条记录可能在 TableA 中找到,但在 TableB 中找不到,反之亦然。
我的表格如下:
表A
Name A1 A2 B1 B2
------------------------
John 11 12 21 23
John 11 12 21 22
John 33 34 31 33
Mary 41 42 54 55
Mary 71 72 81 82
Mary 41 42 51 52
表B
Name A1 A2 B1 B2 C D
---------------------------------
John 11 12 21 22 999 999
John 21 23 11 12 999 999
John 31 32 33 34 999 999
Mary 41 42 51 52 999 999
Mary 54 55 41 42 999 999
列 A1 和 A2 被视为一组,B1 和 B2 被视为另一组。为了在两个表中找到一条记录,我需要
- TableA(A1,A2) = TableB(A1,A2) AND TableA(B1,B2) = TableB(B1,B2)
或者
- TableA(A1,A2) = TableB(B1,B2) AND TableA(B1,B2) = TableB(A1,A2)
对于上面的 2 个表,我会将 TableA 的所有 John 与 TableB 的所有 John 进行比较,并将 TableA 的所有 Mary 与 TableB 的所有 Mary 进行比较。
我应该得到输出
Name A1 A2 B1 B2 C D
-----------------------------------------------
John 31 32 33 34 999 999 (from TableB)
Mary 41 42 54 55 (from TableA)
Mary 71 72 81 82 (from TableA)
Mary 54 55 41 42 999 999 (from TableB)
我是 mySQL 新手,上面的内容对我来说似乎很复杂,我什至不知道从哪里开始。
我非常感谢对此的任何帮助。
最佳答案
如果我理解正确,您需要发出两个查询:一个用于查找 TableA
中不存在于 TableB
中的记录,第二个用于相反的情况。请注意,在一种情况下它是LEFT JOIN
,在第二种情况下它是RIGHT JOIN
。
SELECT a.*, '' AS C, '' AS D, '(from TableA)' AS 'table'
FROM TableA AS a
LEFT JOIN TableB AS b
ON ((a.A1 = b.A1 AND a.A2 = b.A2 AND a.B1 = b.B1 AND a.B2 = b.B2)
OR (a.A1 = b.B1 AND a.A2 = b.B2 AND a.B1 = b.A1 AND a.B2 = b.A2))
AND a.Name = b.Name
WHERE b.Name IS NULL
UNION
SELECT b.*, '(from TableB)' AS 'table'
FROM TableA AS a
RIGHT JOIN TableB AS b
ON ((a.A1 = b.A1 AND a.A2 = b.A2 AND a.B1 = b.B1 AND a.B2 = b.B2)
OR (a.A1 = b.B1 AND a.A2 = b.B2 AND a.B1 = b.A1 AND a.B2 = b.A2))
AND a.Name = b.Name
WHERE a.Name IS NULL
关于mysql - 使用mySQL比较2个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10243171/