我需要在MySql中比较2个表并显示差异

时间:2017-08-20 09:08:51

标签: mysql sql service

两个表table_a和table_b都必须使用employee_id列进行比较,该列存在于两个表中。 两个表都有 MILLIONS 行。 必须显示3个结果 -

  1. employee_id存在于table_a中,但不存在于table_b中。
  2. ,反之亦然。
  3. 可能存在两个表中都存在特定employee_id的情况,但两个表中该employee_id的其他列中的数据可能不同。还必须显示这些行,显示数据不匹配的列。
  4. 由于两个表中有数百万行,因此该过程必须快速,以便可以快速比较两个表。 我正在使用MySQL服务器来编写查询。

1 个答案:

答案 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 - 安全比较运算符。