mysql - 如何查询具有相同结构的多个数据库的同一张表并将所有查询结果放在一起?
问题描述
我有几个数据库都具有相同的结构(相同的表,每个表的相同字段)。
| sword_0 |
| sword_1 |
| sword_2 |
| sword_3 |
| sword_4 |
| sword_5 |
| sword_6 |
| sword_7 |
| sword_8 |
| sword_9 |
+-------------------+
| Tables_in_sword_5 |
+-------------------+
| t_attr |
| t_basics |
| t_data |
| t_equip |
| t_friend |
| t_mail |
| t_resources |
| t_union |
| t_union_member |
+-------------------+
我需要做的是(我先做use sword_5;
,然后):
select tba.rid from (
select rid from t_basics where online_time <= (create_time + 259200)
) as tba
inner join
(select * from t_attr where type = 1000002 and heroLv >= 300) as tbb
on tba.rid = tbb.rid;
所以问题是我不想在每个数据库(use sword_0; use sword_1;....
)之间切换并粘贴相同的查询,然后手动复制所有查询结果。
有没有一种方法可以循环所有数据库并一次获取所有结果?(在所有这些数据库rid
中是独一无二的)。sword_*
解决方案
您不需要use ...
每个数据库。只需在表前加上数据库名称和UNION
/或UNION ALL
查询(https://dev.mysql.com/doc/refman/8.0/en/union.html):
SELECT rid FROM sword_0.t_basics
UNION ALL
SELECT rid FROM sword_1.t_basics
UNION ALL
SELECT rid FROM sword_2.t_basics
ETC...
要回答您的评论,是的,可以使用准备好的语句更动态地执行此操作。这是一个简单的例子:
# group_concat_max_len is usually set to 1024, too low!
SET @@group_concat_max_len = 1000000;
# create your query as a string and assign it to a variable
SET @queryString = (
SELECT GROUP_CONCAT(
CONCAT('SELECT rid FROM `', s.SCHEMA_NAME, '`.basics')
SEPARATOR ' UNION ALL '
)
FROM information_schema.SCHEMATA s
WHERE s.SCHEMA_NAME LIKE 'sword%'
);
# prepare, execute and deallocate your statement
# https://dev.mysql.com/doc/refman/8.0/en/sql-prepared-statements.html
PREPARE stmt FROM @queryString;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
推荐阅读
- python - 如何使用 Python 将数据附加到谷歌电子表格
- python - Python中的高斯拟合
- macos - Android模拟器启动使Mac无响应
- date - ga:YearWeek 与 =isoweeknum 不同
- r - 如何在 purrr 中使用 rlang
- docker - 为什么我不能简单地从我的 Windows 主机 ssh 到 docker 容器?
- xamarin.forms - 我可以创建一些小视图,包括创建的视图以在 mainPage 中使用它吗?
- flask - Jinja2 - 表达式连接问题
- colors - SwiftUI:VStack 不适用于白色背景颜色,但适用于所有其他颜色
- python - 如何从 API 更改用户的密码