我正在尝试创建一个直接的SQL(非存储过程)查询,该查询查找MySQL数据库服务器中的所有数据库,其中包含一个名称与模式匹配且具有特定排序规则的表,然后使用这些数据库名称的列表和表名从表格中获取特定值。
对于此查询:
例如,如果我有3个数据库:
DB1 with tables:
DB2 with tables:
DB3 with tables:
然后我想要一个查询:
例如,在上面的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;
现在问题是弄清楚如何编写一个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
部分