但是这条语句还是只查询了当前库的数据,并没有查询到其他库的数据
时间: 2024-04-13 19:30:40 浏览: 10
如果你想查询所有库下的数据,你需要使用动态SQL来实现。具体做法是通过查询系统表`information_schema.SCHEMATA`获取所有数据库的名称,然后使用循环或者子查询的方式,动态生成每个数据库的查询语句并将结果合并在一起。以下是一个示例代码,用于查询所有库下的数据:
```sql
SET @sql = '';
SELECT GROUP_CONCAT(
CONCAT(
'SELECT v.Version_No, CONCAT(s.Soft_Name, ''-'', vtl.VTL_TechStrategy) AS Test_level_name, a.TestItem, a.testType, a.use_cases, b.instance_data, CONCAT(a.use_cases, ''/'', b.instance_data) AS cases_instances',
' FROM ', TABLE_SCHEMA, '.t_softlist AS s',
' INNER JOIN ', TABLE_SCHEMA, '.t_testversion AS v ON v.TreeUid = s.TreeUid',
' INNER JOIN ', TABLE_SCHEMA, '.t_versiontotestlevel AS vtl ON vtl.Version_Uid = v.Version_Uid',
' LEFT JOIN ', TABLE_SCHEMA, '.view_soft_testreqcanbuildusecase AS qcan ON qcan.VTL_Uid = vtl.VTL_Uid',
' LEFT JOIN (SELECT qcan.TestItem, qcan.testType, COUNT(us.TreeUid) AS use_cases FROM ', TABLE_SCHEMA, '.view_soft_testreqcanbuildusecase AS qcan INNER JOIN ', TABLE_SCHEMA, '.t_usecase AS us ON us.TreeUid = qcan.ReqTreeUid GROUP BY qcan.TestType) AS a ON a.TestItem = qcan.TestItem',
' LEFT JOIN (SELECT qcan.TestItem, qcan.testType, COUNT(uci.UC_Uid) AS instance_data FROM ', TABLE_SCHEMA, '.view_soft_testreqcanbuildusecase AS qcan INNER JOIN ', TABLE_SCHEMA, '.t_usecase AS us ON us.TreeUid = qcan.ReqTreeUid INNER JOIN ', TABLE_SCHEMA, '.t_ucinstances AS uci ON uci.UC_Uid = us.UC_Uid GROUP BY qcan.TestType) AS b ON b.testType = a.testType',
' GROUP BY Test_level_name, a.TestType'
)
SEPARATOR ' UNION ALL '
)
INTO @sql
FROM information_schema.SCHEMATA;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
```
这段代码首先使用`SELECT`语句将所有数据库的查询语句拼接成一个长字符串 `@sql`,每个数据库的查询语句之间使用 `UNION ALL` 进行连接。然后,通过 `PREPARE`、`EXECUTE` 和 `DEALLOCATE PREPARE` 执行动态生成的查询语句。
注意,这段代码会查询所有数据库下的数据,所以如果数据库非常多或者数据量很大,可能会导致性能问题,建议谨慎使用。