表之间的差异

时间:2010-03-26 06:40:27

标签: 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

我需要的结果是这样的:

Table 'first-second'
a   |b   |c
====|====|====
a1  |b1  |c1

或者

Table 'second-first'
a   |b   |c
====|====|====
a4  |b4  |c4

4 个答案:

答案 0 :(得分:6)

您可以尝试外部联接。例如,您可以在表first中找到但在表second中不存在的行(未经测试):

SELECT first.a, first.b, first.c FROM first LEFT JOIN second USING(a,b,c) 
WHERE second.a IS NULL

连接为您提供了一个包含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

现在,您只需查询second.a IS NULL行,即可找到second中缺席的行。

由于您必须加入所有列,性能可能会很差。

答案 1 :(得分:0)

查看MySQL Diff Tool

接受的答案提到了可以使用的工具Toad® for MySQL

答案 2 :(得分:0)

差异意味着什么?在编写查询时区分字段???你可以在编写查询时使用first.asecond.a等。 (希望我回答你的问题,如果不是的话:更多地了解我更了解的问题

答案 3 :(得分:0)

你想要这个:

select column_name
from information_schema.columns
where
    table_name = 'FirstTable'
    and table_schema = 'DatabaseHoldingFirstTable'
    and column_name not in (
        select column_name
        from information_schema.columns
        where table_name = 'SecondTable'
        and table_schema = 'DatabaseHoldingSecondTable'
    );