0

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

SELECT * FROM db1.contact WHERE id 
IN (SELECT contact_id FROM (REPLACE(DATABASE(),1,2)).email);

我怎么能这样做?

4

2 回答 2

0

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

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 的DATABASE部分不支持任何类型的函数(如 REPLACE、IF 等)

于 2013-07-03T06:27:52.410 回答
0

我能看到的唯一方法是动态 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;
于 2013-07-03T06:54:54.620 回答