2017-08-20 35 views
0

两个表格table_a和table_b必须使用两者中存在的employee_id列进行比较。 这两个表格都有百万行行。 3必须显示结果 -我需要比较MySql中的两个表格,并显示差异

  1. employee_id存在于table_a中,但不存在于table_b中。
  2. 反之亦然。
  3. 当两个表中都存在特定的employee_id时,会出现这种情况,但该employee_id的其他列中的数据可能在两个表中都不相同。还必须显示这些行,以显示存在数据不匹配的列。

由于这两个表中有数百万行,因此该过程必须快速,以便可以快速比较两个表。 我正在使用MySQL服务器来编写查询。

+1

你很幸运,MySQL相当快... – TGrif

+0

看看https://stewashton.wordpress.com/2014/02/04/compare-and-sync-tables-tom-kyte-and-通过...分组?该方法是联合表格,对于要比较的所有列以及两列来显示该行所来源表中的哪一个,然后通过您正在比较的列对此进行总结,并找出两者之间的出现次数之间的差异表。优点是每个表只被扫描一次。你也可能会发现,包括你在索引中比较的colums可以加快速度。 – Mic

+0

而你的问题是? –

回答

0

这是相当棘手的,但这里是假设employee_id在每个表中是唯一的例子:

select employee_id, 
     (case when max(which) = 'a' then 'A-only' 
      when min(which) = 'b' then 'B-only' 
      else 'both' 
     end) as which, 
     concat_ws(',', 
       (case when count(*) = 2 and not min(col1) <=> max(col1) then 'col1' end), 
       (case when count(*) = 2 and not min(col2) <=> max(col2) then 'col2' end) 
       ) as differences 
from ((select 'a' as which, employee_id, col1, col2 
     from a 
    ) union all 
     (select 'b' as which, employee_id, col1, col2 
     from b 
    ) 
    ) ab 
group by employee_id; 

注意,这里使用了NULL -safe比较操作。

相关问题