You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何高效查找数据库My_DB中包含列My_Emp_ID的所有表

如何高效查找数据库My_DB中包含列My_Emp_ID的所有表

手动挨个翻几百张表找指定列?这也太折磨人了!我来给你分享几个主流数据库里高效搞定的方法,不用再浪费时间手动排查:

MySQL/MariaDB

直接利用系统自带的information_schema元数据库,它存储了所有数据库、表和列的结构信息。运行下面的SQL就能一键得到结果:

SELECT table_name 
FROM information_schema.columns 
WHERE table_schema = 'My_DB' 
  AND column_name = 'My_Emp_ID';

这个查询会直接过滤出My_DB库中所有包含My_Emp_ID列的表名,速度快还准确。

SQL Server

你可以选择两种方式,第一种是通过系统视图关联查询:

SELECT t.name AS table_name
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE s.name = 'dbo' -- 替换成你的统一schema名称
  AND c.name = 'My_Emp_ID'
  AND t.type = 'U'; -- 仅查询用户创建的表,排除系统表

第二种也可以用information_schema,写法更简洁:

SELECT table_name
FROM information_schema.columns
WHERE table_catalog = 'My_DB'
  AND table_schema = 'dbo' -- 替换成你的统一schema名称
  AND column_name = 'My_Emp_ID';

PostgreSQL

同样可以借助information_schema快速查询:

SELECT table_name
FROM information_schema.columns
WHERE table_catalog = 'My_DB'
  AND table_schema = 'public' -- 替换成你的统一schema名称
  AND column_name = 'My_Emp_ID';

如果习惯用PostgreSQL原生的系统目录表,也可以用这个查询:

SELECT relname AS table_name
FROM pg_catalog.pg_attribute a
JOIN pg_catalog.pg_class c ON a.attrelid = c.oid
JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
WHERE n.nspname = 'public' -- 替换成你的统一schema名称
  AND a.attname = 'My_Emp_ID'
  AND a.attnum > 0 -- 排除系统隐藏列
  AND NOT a.attisdropped -- 排除已被删除的列
  AND c.relkind = 'r'; -- 仅查询普通用户表

总的来说,核心思路就是利用数据库自带的元数据存储(系统视图/表),不用手动遍历,运行一条SQL就能快速得到所有符合条件的表,效率拉满!

备注:内容来源于stack exchange,提问作者Talha Tayyab

火山引擎 最新活动