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

Oracle 子查询批量统计表列数结果异常问题咨询

错误原因

你的SQL写法存在字段作用域优先级冲突的问题:
子查询中where table_name=TABLE_NAME没有指定表归属别名,Oracle解析SQL时会优先匹配当前子查询范围内的字段,也就是两个TABLE_NAME都会被识别为user_tab_columns的同名字段,最终条件等价于恒真,所以返回的是当前用户下所有表的列数总和,不是单表对应的列数。

修正后的SQL

给两张表分别加别名明确字段归属即可:

select 
    t.TABLE_NAME, 
    t.NUM_ROWS,
    (select count(*) from user_tab_columns c where c.table_name = t.TABLE_NAME) as COLUMN_COUNT
from user_tables t
补充说明
  • user_tables中的NUM_ROWS是Oracle统计信息快照值,仅为估算值,不会实时同步表的实际行数,需要精准行数时需单独对目标表执行count(*)查询。
  • Oracle系统表的字段默认都是大写,如果你的表名建表时用了小写加双引号的特殊写法,需要额外调整匹配逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:36:03