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

如何仅获取数据库表名而非视图名?解决SHOW TABLES混显问题

只查询数据库中的表名(排除视图)的解决方案

嗨,这个问题我碰到过好多次了!show tables from database; 确实会把表和视图一并返回,要精准过滤出仅表名的话,得根据你使用的数据库系统来调整查询方式,下面是几个主流数据库的具体实现:

MySQL/MariaDB

直接查询information_schema.tables系统视图,通过TABLE_TYPE字段区分表和视图:

SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = '你的数据库名' 
  AND table_type = 'BASE TABLE';
  • 把'你的数据库名'替换成你实际要查询的数据库名称
  • BASE TABLE代表实体表,视图的TABLE_TYPE值为VIEW,这样就会自动排除视图

PostgreSQL

有两种常用方式,选你顺手的就行:

方式1:使用pg_tables和pg_views过滤

SELECT tablename 
FROM pg_tables 
WHERE schemaname = 'public' 
  AND tablename NOT IN (SELECT viewname FROM pg_views WHERE schemaname = 'public');

方式2:使用information_schema.tables

SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'public' 
  AND table_type = 'BASE TABLE';
  • 默认schema是public,如果你的表在其他schema下,记得替换成对应名称

SQL Server

最简单的方式是直接查询sys.tables系统表(只存储表信息):

SELECT name AS table_name FROM sys.tables;

也可以用information_schema的方式:

SELECT table_name 
FROM information_schema.tables 
WHERE table_type = 'BASE TABLE';

Oracle

如果你要查当前用户的表,直接用user_tables即可(它只包含表,不包含视图):

SELECT table_name FROM user_tables;

如果要查所有你有权限访问的表,用all_tables:

SELECT table_name FROM all_tables;

核心逻辑就是利用数据库自带的系统元数据对象(系统表/视图),通过类型标识或者专属表来区分实体表和视图,替代通用的show tables命令。

内容的提问来源于stack exchange,提问作者sagar vanave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:40:46