【问题标题】:Is this possible? Mysql Query using databaname from a table column value这可能吗? Mysql 使用来自表列值的数据库名称进行查询
【发布时间】:2012-07-13 17:01:11
【问题描述】:

我有两个表 TabA 和 TabB。 TabA 在 DB_A 中,TabB 在 'DBX'_B 中。

现在我需要从 DBA 的 TabA 的字段中获取 DBX_B 名称,并将它们加入查询以从这两个表中提取数据。

 DBA.TabA:
 ID        DB_Name      UserName    Password
 -------------------------------------------
 101       DBX          xyz         abc


 DBX_B.TabB:

 ID        Type      FirstName      LastName
 -------------------------------------------
 101       Admin     xyz            abc

我需要从DBA.TabA 中拉出ID, Username, Password 并从DBX_B.TabB 中拉出Type, Firstname, LastName。但是可以从 DB_NAME 中识别要使用的第二个数据库名称,并将其与 _B'. So the 2nd database to pull from isDBA.TabA.DB_Name' + _B 之类的字符串连接。 从两者的 ID 上连接这两个表。

查询可能类似于:

  SELECT DBA.TabA.ID, DBA.TabA.Username, DBA.TabA.Password, 
         DB2.TabB.Type, DB2.TabB.FirstName, DB2.TabB.Lastname 
    FROM DBA, CONCAT(DBA.TabA.DB_Name, '_B') as DB2
   WHERE DBA.TabA.ID = DB2.TabB.ID

当然,我们也可以用 Join 代替 where。

这样的事情可能吗?想法?

【问题讨论】:

  • 我对此表示怀疑。这并不是关系数据库的设计初衷......
  • 对我来说这看起来像是一个直接查询,除了数据库名称来自表值。 :-)

标签: mysql database where


【解决方案1】:

您可以使用一些子选择来执行此操作,但性能会受到巨大影响,以至于不值得。您最好将表拉到中间层(php?)并在那里将数据连接在一起。你如何做到这一点将取决于你的中间层是什么。

您的数据库设计存在缺陷,如果您仍处于设计阶段,请停止并重新设计,如果需要,请雇用某人,现在正确设计您的数据模型将为您节省很多未来的痛苦。如果您在维护某些东西并坚持现有的东西,那么使用中间层将是您的最佳选择。

【讨论】:

    【解决方案2】:

    正如 Oli 所说,您不能在 mysql 和大多数关系数据库程序中执行此操作,您必须运行一个 use 命令来指示 RDBMS 使用您的数据库,因为它可能存储了许多不同的数据库。

    例如,当你登录到 mysql 时,你必须运行:

    use DB_NAME;
    

    指示它使用该特定数据库,然后只有您可以访问它的表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 2011-05-12
      相关资源
      最近更新 更多