Oracle 12c如何查询不包含指定列col_abc的表
原查询错误原因
你写的SQL逻辑是筛选所有**列名不等于COL_ABC**的列对应的表名,只要一张表存在任意其他列,哪怕它本身已经有COL_ABC列,也会被查询返回,和你要的「完全不含该列的表」的需求完全不符。
正确查询实现
推荐两种常用实现方式:
方式1:NOT EXISTS 写法(性能更优)
SELECT table_name FROM user_tables t WHERE NOT EXISTS ( SELECT 1 FROM user_tab_columns c WHERE c.table_name = t.table_name AND c.column_name = 'COL_ABC' );
逻辑说明:从当前用户的所有表中,排除所有存在COL_ABC列的表,剩余的就是符合要求的表。注意Oracle系统表存储的列名默认是全大写,如果你创建列时特意指定了小写,可将条件改为LOWER(c.column_name) = 'col_abc'适配。
方式2:MINUS 集合运算写法(逻辑更直观)
-- 取所有用户表,减去所有包含COL_ABC列的表,剩余就是目标表 SELECT table_name FROM user_tables MINUS SELECT table_name FROM user_tab_columns WHERE column_name = 'COL_ABC';
内容的提问来源于stack exchange,提问作者Amit Kumar Tyagi
相关产品推荐
相关产品推荐

