时间:2015-05-20 19:48:49

标签: mysql sql database multiple-databases

我正在尝试创建一个直接的SQL(非存储过程)查询,该查询查找MySQL数据库服务器中的所有数据库,其中包含一个名称与模式匹配且具有特定排序规则的表,然后使用这些数据库名称的列表和表名从表格中获取特定值。

对于此查询:

  • 我不知道服务器上的数据库名称(必须查询)
  • 我不知道数据库中可以匹配的表的名称(必须与%选项的模式进行比较)

例如,如果我有3个数据库:

DB1 with tables:

  • 东西
  • f_options (包含一行,其中名为option_name的列的值为'test',而option_value列的值为'y')

DB2 with tables:

  • 东西

DB3 with tables:

  • something_else
  • zeoptions (包含一行,其中名为option_name的列的值为'test',而option_value列的值为'z')

然后我想要一个查询:

  1. 查找包含与排序规则和命名方案匹配的表的数据库
  2. 选择名为option_name的列在
  3. 列中具有值为“test”的行的行的值

    例如,在上面的3个数据库表中,它会看到数据库1和3有一个匹配的表,它将返回值'y'和'z'

    我试图在不使用存储过程或视图(只是一个简单的SQL语句)的情况下执行此操作。

    到目前为止,我已经找到了一个工作系统1.通过查询MySQL information_schema表,我可以使用这个来获取数据库+匹配表的名称:

    SELECT s.dbname, s.tablename FROM ( SELECT 
    `information_schema`.`TABLES`.`TABLE_SCHEMA` dbname ,  
    `information_schema`.`TABLES`.`TABLE_NAME` tablename FROM  
    `information_schema`.`TABLES` WHERE `information_schema`.`TABLES`.`TABLE_NAME` LIKE 
     '%options' AND `information_schema`.`TABLES`.`TABLE_COLLATION` LIKE  
    'utf8mb4_unicode_ci' ) as s;
    

    This query works

    现在问题是弄清楚如何编写一个SELECT语句,使用上面的SQL语句作为子查询来填充FROM

    现在这就是我所拥有的(虽然FROM语句当前的工作方式存在明显的SQL错误)。如果我可以解决FROM语句问题,我可以完成其余的

    SELECT `s.dbname`.`s.tablename`.`option_value` FROM  `s.dbname`.`s.tablename`
    ( SELECT `information_schema`.`TABLES`.`TABLE_SCHEMA` dbname , 
    `information_schema`.`TABLES`.`TABLE_NAME` tablename FROM 
    `information_schema`.`TABLES` WHERE 
    `information_schema`.`TABLES`.`TABLE_NAME` LIKE '%options' AND
     `information_schema`.`TABLES`.`TABLE_COLLATION` LIKE 'utf8mb4_unicode_ci' ) as s
    WHERE `s.dbname`.`s.tablename`.`option_name` LIKE 'test';
    

    可以简化为

    SELECT `s.dbname`.`s.tablename`.`option_value` FROM  `s.dbname`.`s.tablename`
    ( the working query above ) as s
    WHERE `s.dbname`.`s.tablename`.`option_name` LIKE 'test';
    

    有谁知道如何修复

     FROM  `s.dbname`.`s.tablename` ( SELECT ... )  as s
    

    部分

0 个答案:

没有答案