数据库之间的值重复

2024-05-16 20:37:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有15个不同的MySQL数据库,它们来自不同的客户机,结构都是相同的,我正在寻找一种方法来查看witch客户机存在于我的多个客户机数据库中。任何能为我指明正确方向的事情都将不胜感激


Tags: 方法数据库客户机mysql事情结构正确方向witch
1条回答
网友
1楼 · 发布于 2024-05-16 20:37:04

如果所有数据库都在同一个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个数据库中表中所有行的所有ssn的结果集,这可能是一个相当大的集合,因此您需要有足够的临时空间和时间来执行排序操作以识别“重复项”。对于大型集合,这可能会拖一段时间,因此还要注意锁争用(影响这些表上的其他活动)


编辑

15个单独的MySQL实例将需要15个单独的MySQL数据库连接

我要做的是:从每个数据库中提取ssn列表,将每个ssn提取到一个单独的平面文件中。然后将所有15个平面文件加载到一个表中(在单独的数据库中)。MySQLLOAD 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

相关问题 更多 >