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

如何在数据库中n个同结构表中查找指定值?

在同Schema的N张表中查找指定值的方法

核心思路是利用UNION ALL合并查询结果,或者通过数据库系统表生成动态SQL来批量处理,以下是具体实现方式:

一、手动拼接UNION ALL(表数量少的场景)

如果表的数量不多,直接把每张表的查询语句用UNION ALL拼接,还可以额外加字段标记数据来源表:

SELECT id, 'table1' AS source_table FROM table1 WHERE name = 'sam'
UNION ALL
SELECT id, 'table2' AS source_table FROM table2 WHERE name = 'sam'
UNION ALL
SELECT id, 'table3' AS source_table FROM table3 WHERE name = 'sam';

二、动态生成SQL(表数量多的场景)

当表数量较多时,手动拼接效率太低,可以借助数据库的系统表自动生成查询语句:

MySQL 实现

SELECT CONCAT(
    'SELECT id, ''', table_name, ''' AS source_table FROM ', table_name, ' WHERE name = ''sam'' UNION ALL '
)
FROM information_schema.tables
WHERE table_schema = '你的Schema名' 
  AND table_name LIKE '表前缀%'; -- 有统一前缀时用,无则删除该行

将查询结果拼接成完整SQL,去掉最后一个UNION ALL后执行即可。

Oracle 实现

SELECT 'SELECT id, ''' || table_name || ''' AS source_table FROM ' || table_name || ' WHERE name = ''sam'' UNION ALL '
FROM all_tables
WHERE owner = '你的Schema名'
  AND table_name LIKE '表前缀%';

同样拼接结果并移除末尾的UNION ALL后执行。

SQL Server 实现

SELECT CONCAT(
    'SELECT id, ''', name, ''' AS source_table FROM ', name, ' WHERE name = ''sam'' UNION ALL '
)
FROM sys.tables
WHERE SCHEMA_NAME(schema_id) = '你的Schema名'
  AND name LIKE '表前缀%';

生成语句后调整语法,执行最终查询。

注意事项

  • 确保所有目标表的字段名、数据类型完全一致,否则UNION ALL会报错
  • 若数据量庞大,建议给查询字段(如name)添加索引提升性能
  • 动态生成的SQL需检查语法正确性,避免执行错误

内容的提问来源于stack exchange,提问作者Learning Only

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:35:22