选择Oracle 12c中不包含某列的表



数据库中的大多数表都有一个特定的列'col_abc'。如何查找不包含'col_abc'列的表?

查询

select  table_name
from  user_tab_columns
where  column_name not in ('COL_ABC')

没有返回预期的结果。

谢谢,Amit

有一种方法:

select table_name from user_tables
minus
select table_name from user_tab_columns
where column_name = 'ABC';

下面的查询将给出预期的结果。请修改ur_Schema_name>作为所需的模式名

SELECT * FROM ALL_TABLES at
WHERE at.OWNER = <ur_Schema_name>
AND NOT EXISTS (SELECT 1 FROM ALL_TAB_COLUMNS atc
WHERE atc.TABLE_NAME = at.TABLE_NAME
AND atc.OWNER =at.OWNER
AND atc.COLUMN_NAME='COL_ABC'
AND atc.OWNER=<ur_Schema_name>);

如果您只需要查看当前用户的模式,这可能是编写查询的最简单方法:

select table_name
from   user_tables
where  table_name not in (
select table_name
from   user_tab_columns
where  column_name = 'COL_ABC'
)
;

这在一个关键的方面使用了user_tab_columns中的列table_name约束not null的事实。

如果需要查看所有模式,则需要使用dba_all_字典视图,并查找(owner, table_name)对,而不仅仅是table_name。留给你做进一步的练习

您也可以使用LEFT JOIN来使用此解决方案。这是一种NOT EXISTS子句。

select t.* 
from user_tables t
left join (
select table_name
from user_tab_columns
where column_name = 'COL_ABC'
) tc
on (t.table_name = tc.table_name)
where tc.table_name is null
;

相关内容

  • 没有找到相关文章

最新更新