我有两个表,具有相同的结构,例如: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
答案 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)
接受的答案提到了可以使用的工具Toad® for MySQL。
答案 2 :(得分:0)
差异意味着什么?在编写查询时区分字段???你可以在编写查询时使用first.a
,second.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'
);