Mysql 跨多个数据库运行查询,以了解用户名的重复次数

Mysql 跨多个数据库运行查询,以了解用户名的重复次数,mysql,sql,database,Mysql,Sql,Database,我有一个单一的租赁网络应用程序(每个租户都有自己的数据库)。我正在尝试将其移动到多租户体系结构,但在我这样做之前,我正在尝试识别冲突 目前,我正试图找出哪些用户名可能会在许多不同的租户之间重复 到目前为止,我的解决方案是编写一个执行以下操作的查询: SELECT `user`, count(*) FROM ( (SELECT * FROM `100001`.`user`) UNION (SELECT * FROM `100002`. `user`) UNION

我有一个单一的租赁网络应用程序(每个租户都有自己的数据库)。我正在尝试将其移动到多租户体系结构,但在我这样做之前,我正在尝试识别冲突

目前,我正试图找出哪些用户名可能会在许多不同的租户之间重复

到目前为止,我的解决方案是编写一个执行以下操作的查询:

SELECT `user`, count(*) FROM (     
    (SELECT * FROM `100001`.`user`) UNION
    (SELECT * FROM `100002`. `user`) UNION
    (SELECT * FROM `100003`. `user`) UNION
    (SELECT * FROM `100004`. `user`) UNION
    (SELECT * FROM `100005`. `user`) UNION
    ...
) as `all_users`
GROUP BY `user`
这非常有效,但当您意识到已经有100多个数据库时,扩展性就不好了

我开始考虑使用CONCAT来帮助我生成查询,但遇到了以下问题:

SELECT CONCAT('(SELECT * FROM `', SCHEMA_NAME, '`.`user`)')
FROM `information_schema`.`SCHEMATA` WHERE `SCHEMA_NAME` REGEXP '[0-9]{6}';

有没有想过从这里走到哪里?

光标和/或动态sql将是通常的方式。不过,我不明白为什么在这个例子中需要它。您不打算按用户名为用户表设置键,是吗?您可能希望使用MySQL外部的脚本语言生成语句,而这种语言非常简单。@tadman,让脚本在数据库上运行需要相当多的工作。我目前只有对生产数据库运行查询的权限。我不知道你如何才能在背后绑一只手。