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