在一个mysql sql查询中使用两个数据库

在一个mysql sql查询中使用两个数据库,mysql,Mysql,我想在一个sql查询中使用2个数据库。我将在一个数据库中运行查询,另一个数据库应该通过在表中添加db名称前缀来选择,但我想动态选择第二个数据库名称。 例如: 我如何做到这一点?您可以尝试执行以下操作: SELECT * FROM db1.contact WHERE id IN (SELECT contact_id FROM db2.email); 对于第二台服务器: SELECT * FROM db21.contact WHERE id IN (SELECT contact_id FROM d

我想在一个sql查询中使用2个数据库。我将在一个数据库中运行查询,另一个数据库应该通过在表中添加db名称前缀来选择,但我想动态选择第二个数据库名称。 例如:


我如何做到这一点?

您可以尝试执行以下操作:

SELECT * FROM db1.contact WHERE id IN (SELECT contact_id FROM db2.email);
对于第二台服务器:

SELECT * FROM db21.contact WHERE id IN (SELECT contact_id FROM db1.email);

但是不能动态选择数据库,因为SQL的数据库部分不支持任何类型的函数(如替换、IF等)

我能看到的唯一方法是动态SQL

SELECT @dbname := 'db2';
SELECT @query := CONCAT('SELECT * FROM db1.contact WHERE id IN ',
                        '(SELECT contact_id FROM ', @dbname, '.email);');

PREPARE stmt FROM @query;
EXECUTE stmt;

动态澄清?,您正在使用的替换有一个字符串处理函数,它不能用于数据库(),这是一个服务器/会话设置。您不能这样做。您必须使用2个查询。为什么有这么多数据库?我有大约50个db对,比如,我有大约50个db对,ae_db_1,ae_db_2 ca_db_1,ca_db_2 de_db_1,de_db_2…………等等,我有脚本逐个选择所有db_1并运行上述sql查询。在该查询中,我需要动态选择db_2查询。例如:我的脚本将选择ae_db_1并运行查询,现在ae_db_2应该被动态选择。
SELECT @dbname := 'db2';
SELECT @query := CONCAT('SELECT * FROM db1.contact WHERE id IN ',
                        '(SELECT contact_id FROM ', @dbname, '.email);');

PREPARE stmt FROM @query;
EXECUTE stmt;