数据库之间的重复值

时间:2014-07-07 18:37:09

标签: php python mysql sql database

我有来自不同客户端的15个不同的MySQL数据库,它们都是相同的结构,我正在寻找一种方法来查看我的客户数据库中存在的客户。他们在每个数据库中都有相同的SSN来搜索对于。任何有助于我指向正确方向的事情都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

如果数据库都在同一个MySQL实例中,并且您的用户拥有所有15个数据库的权限......

这是一种方法:

SELECT a.ssn 
     , GROUP_CONCAT(a.src ORDER BY a.src)
  FROM (
         SELECT 'db01' AS src, t01.ssn FROM database_one.mytable t01
          UNION ALL
         SELECT 'db02' AS src, t02.ssn FROM database_two.mytable t02
          UNION ALL
         SELECT 'db03' AS src, t03.ssn FROM database_three.mytable t03
            ...
          UNION ALL
         SELECT 'db15' AS src, t15.ssn FROM database_fifteen.mytable t15
       ) a
   GROUP BY a.ssn
  HAVING SUM(1) > 1

请注意,这将要求MySQL在所有15个数据库中实现来自表中所有行的ALL ssn的结果集,这可能是一个相当大的集合,因此您需要有足够的临时空间,并且需要时间来执行排序操作以识别"重复"。对于大型集合,这可能会持续一段时间,因此也要注意锁争用(影响这些表上的其他活动。)


修改

15个独立的MySQL实例需要15个独立的MySQL数据库连接。

我会做什么:从每个数据库中提取ssn列表,每个数据库都放入一个单独的平面文件中。然后将所有十五个平面文件加载到一个表中(在单独的数据库中)。 MySQL LOAD DATA语句是执行此操作的便捷方式。

最终的结果是,在上面的查询中,我的表格看起来像内联视图,别名为a。要识别"重复",外部查询将是相同的......

SELECT a.ssn
     , GROUP_CONCAT(a.src ORDER BY a.src)
  FROM all_ssns s
 GROUP BY a.ssn
HAVING SUM(1) > 1