我目前有一个数据库服务器,它存储一个主数据库,并且该数据库中的表具有类似于下面的结构
公司.companyInfo
ID | Name | databaseName | otherinfo
---+----------+--------------+----------
0 | companyA | databaseA | Extra1
1 | companyB | databaseB | Extra2
公司数据库如下
数据库A.users
userID | Name | Password | extra
-------+---------+-----------+---------
0 | user1 | pass1 | other1
1 | user2 | pass2 | other2
和databaseB类似。
我想要做的是从用户表之一获取用户信息,但要从主数据库链接
所以我想做的是某种子选择来获取所有用户详细信息,但将数据库名称输入到company.companyInfo 表查询中的子选择中。
我被困住了..请帮忙!
最佳答案
尚不完全清楚您想要什么,但原则上不能使用表达式(包括表查找中的字段值)作为标识符(例如表或列的名称)。
一种解决方法是从包含所需查询的字符串中“准备”一条语句;这样的字符串可以通过在标识符的位置连接表达式来构造:
SELECT CONCAT(
'SELECT * FROM `', REPLACE(databaseName, '`', '``'), '`.users'
) INTO @qry FROM companies.companyInfo WHERE ID = 1;
PREPARE stmt FROM @qry;
EXECUTE stmt;
但是,使用一个 SELECT
查询在应用程序中获取数据库名称可能同样容易,然后执行相同的串联以从那里发出第二个查询。
综上所述,也许您的数据结构需要进一步规范化?为什么不将所有数据库合并为一个,每个表中有一列指示每条记录与哪家公司相关?
关于mysql - 如何连接数据库和表,其中数据库名称源自当前表中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10977235/