比较多个表的列,一组表具有前缀,并且列数少于其他表

时间:2012-12-14 16:08:28

标签: sql oracle10g

嗨我需要将一组表的列与另一组表进行比较。让我解释一下结构。第二组表从第一组开始,列数较少。

TABLE NAMES:
W_table_1_fact
W_tables_2_fact
.........
........
W_table_n_dim
W_table_1_dim
W_tables_2_dim
.........
........
W_table_n_dim


ABC_W_table_1_fact
ABC_W_tables_2_fact
.........
........
ABC_W_table_n_dim
ABC_W_table_1_dim
ABC_W_tables_2_dim
.........
........
ABC_W_table_n_dim

现在带有前缀ABC的表的数据和列都是从原始表中获取的,除了几个缺少的列和一些数据(现在不关心)。我需要检查我们需要的列是否已经在带有前缀ABC的表中加载。所以我需要进行一个查询,告诉我哪些列丢失,任何人都可以帮我查询。如果您需要任何信息,请随时询问我将提供任何所需信息。

1 个答案:

答案 0 :(得分:2)

所以你想看到源列表中的列(而不是数据)但不是整个表列表的目标?你可以为USER_TAB_COLUMNS做一个MINUS。例如:

with tables as
 (select table_name t1, 'ABC_'||table_name t2 --<--- prefixed table 2 based on tables name
    from user_tables 
   where table_name in ('W_TABLE_1_FACT', 'W_TABLES_2_FACT' ))
select t.*,
       cursor (select column_name
                  from user_tab_columns
                 where table_name = t.t1
                minus
                select column_name 
                  from user_tab_columns 
                 where table_name = t.t2) missing_columns
  from tables t