mysql - 如何连接数据库和表,其中数据库名称源自当前表中的字段?

标签 mysql database select search

我目前有一个数据库服务器,它存储一个主数据库,并且该数据库中的表具有类似于下面的结构

公司.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/

相关文章:

php - 我的 php 代码转换了一些字符

database - 使用关系更改 Access 主键

.net - Fluent Nhibernate 外键约束在删除时抛出异常

MySQL触发器插入到另一个表

php - 通过 php 锁定 mysql 行

php - 无法弄清楚如何在 Laravel 上设置数据库

mysql - 获取重复记录以显示在同一行中

mysql - SQL选择属于同一对象的用户

mysql - SQL - 连接中的重复项

MySQL 变量值错误(SELECT INTO)