You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从db数据库的同结构多表中查询指定key的所有行?

解决多同结构表的统一查询问题

嘿,这个需求其实很好解决!核心就是用UNION ALL把各个表的查询结果合并起来,下面给你一步步说清楚:

基础解决方案(手动指定表)

如果你的表数量不多,直接写UNION ALL拼接每个表的查询语句就行——因为你所有表结构完全一致,所以每个子查询的格式都一样:

SELECT `key`, `value`
FROM table_1
WHERE `key` = 'x' -- 替换成你要查询的key值
UNION ALL
SELECT `key`, `value`
FROM table_2
WHERE `key` = 'x'
UNION ALL
SELECT `key`, `value`
FROM table_3
WHERE `key` = 'x'
-- 继续添加更多table_n的查询语句,直到所有表都包含进来

为什么用UNION ALL而不是UNION?

  • UNION会自动去重结果,但你需要保留所有匹配的行(比如例子里的三个'1'对应的value),所以用UNION ALL更合适
  • UNION ALL不需要做重复检查,执行效率比UNION更高

用你给出的测试数据,当key='1'时,这个查询返回的结果就是:

keyvalue
1aaa
1bbb
1ccc

完全符合你的预期!

进阶解决方案(表数量多的时候用动态SQL)

如果你的表特别多(比如table_1到table_100),手动写所有表太麻烦,可以用数据库的系统表来动态生成查询语句(以MySQL为例):

-- 生成动态查询语句
SELECT CONCAT(
    'SELECT `key`, `value` FROM ', 
    GROUP_CONCAT(table_name SEPARATOR ' WHERE `key` = ''x'' UNION ALL SELECT `key`, `value` FROM '),
    ' WHERE `key` = ''x'''
) AS dynamic_sql
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'db' -- 替换成你的数据库名
  AND table_name LIKE 'table_%'; -- 匹配你的表名规则,比如以table_开头

执行这个语句会得到一个完整的UNION ALL查询语句,直接复制执行就能得到所有表中key='x'的行啦~

内容的提问来源于stack exchange,提问作者Haggai Magen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:45:31