【问题标题】:duplicate values between databases [closed]数据库之间的重复值[关闭]
【发布时间】:2014-08-28 08:11:14
【问题描述】:

我有 15 个来自不同客户端的不同 MySQL 数据库,它们的结构都相同为了。任何可以帮助我指出正确方向的事情都将不胜感激。

【问题讨论】:

  • 我想您可以编写一个连接到数据库、查询它们并比较值的应用程序。

标签: php python mysql sql database


【解决方案1】:

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


编辑

十五个独立的 MySQL 实例将需要十五个独立的 MySQL 数据库连接。

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

【讨论】:

  • 非常感谢您抽出宝贵时间提供帮助。就我而言,由于访问数据库的程序不允许选择数据库名称,因此所有数据库都位于单独的 mysql 实例上:(
猜你喜欢
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 2014-08-18
  • 1970-01-01
  • 2014-08-24
  • 2012-02-08
  • 2018-07-14
  • 1970-01-01
相关资源
最近更新 更多