【问题标题】:How can I join a database and table where the database name is derived from a field in the current table?如何加入数据库名称派生自当前表中的字段的数据库和表?
【发布时间】:2012-06-14 04:31:46
【问题描述】:

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

companies.companyInfo

ID | Name     | databaseName | otherinfo
---+----------+--------------+----------
0  | companyA | databaseA    | Extra1
1  | companyB | databaseB    | Extra2

公司数据库如下

databaseA.users

userID | Name    | Password  |  extra
-------+---------+-----------+---------
0      | user1   | pass1     | other1
1      | user2   | pass2     | other2

和databaseB类似。

我想要做的是从用户表之一获取用户信息,但要从主数据库链接

所以我想做的是某种子选择来获取所有用户详细信息,但将数据库名称输入到来自 Companies.companyInfo 表查询的子选择中。

我卡住了..请帮忙!

【问题讨论】:

    标签: mysql database select search


    【解决方案1】:

    您所追求的并不完全清楚,但原则上不能使用表达式(包括表查找中的字段值)作为标识符(例如表或列的名称)。

    一种解决方法是从包含所需查询的字符串中“准备”一条语句;可以通过将表达式连接到其中来代替标识符来构造这样的字符串:

    SELECT CONCAT(
      'SELECT * FROM `', REPLACE(databaseName, '`', '``'), '`.users'
    ) INTO @qry FROM companies.companyInfo WHERE ID = 1;
    
    PREPARE stmt FROM @qry;
    EXECUTE stmt;
    

    但是,使用一个SELECT 查询在您的应用程序中获取数据库名称可能同样容易,然后执行相同的连接以从那里发出第二个查询。

    说了这么多,也许您的数据结构需要进一步规范化?为什么不将所有数据库合并为一个,每个表中都有一列指示每条记录与哪个公司相关?

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 2012-07-27
      • 2022-10-23
      • 2014-06-11
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 2020-04-16
      相关资源
      最近更新 更多