表之间的差异

use*_*070 1 mysql diff

我有两个表,具有相同的结构,例如:table"first",列'a','b','c'和表'second'具有相同的列.如何找到这两个表之间的差异?当然,我可以在python上创建一些脚本,这将创建set(a)-set(b),但我认为在mysql中有一些方法可以做到这一点.

UPD:

Table 'first'
a   |b   |c
====|====|====
a1  |b1  |c1
a2  |b2  |c2
a3  |b3  |c3

Table 'second'
a   |b   |c
====|====|====
a2  |b2  |c2
a3  |b3  |c3
a4  |b4  |c4
Run Code Online (Sandbox Code Playgroud)

我需要的结果是这样的:

Table 'first-second'
a   |b   |c
====|====|====
a1  |b1  |c1
Run Code Online (Sandbox Code Playgroud)

要么

Table 'second-first'
a   |b   |c
====|====|====
a4  |b4  |c4
Run Code Online (Sandbox Code Playgroud)

tit*_*boa 6

你可以尝试外连接.例如,您可以找到表中first存在但在second此表中不存在的行(未测试):

SELECT first.a, first.b, first.c FROM first LEFT JOIN second USING(a,b,c) 
WHERE second.a IS NULL
Run Code Online (Sandbox Code Playgroud)

连接为您提供了一个包含所有行的表first,如下所示:

first.a first.b first.c second.a second.b second.c
   a1      b1     c1      NULL      NULL     NULL
   a2      b2     c2       a2       b2       c2
Run Code Online (Sandbox Code Playgroud)

现在,您只需查询行second.a IS NULL以查找不存在的行second.

性能可能很差,因为您必须加入所有列.