我已知道一表,还有一个与它表结构相同的表,只是表名不同,不知如何查找出来

解决方案 »

  1.   

    select * from user_table
      

  2.   

    select * from  user_tables
      

  3.   

    select * from user_tab_columns;这个表能查到所有表的结构,你自己写一个查询语句对比一下就行
      

  4.   

    还是有难度的,困难在于,要将所有表字段,一一对应上。
    如果只是用 IN 的话,结果就包含了许多不需要的结果(一个字段对映上,但其它字段没对应上)。如, 字段 A 对上了,但 字段 B、C 是无法对映的。
      

  5.   

    也许可以用wm_concat函数将 column_name和data_type连起来,然后比较
    select wm_concat(column_name) from user_tab_columns) WHERE table_name='JOBS';
      

  6.   

    如果仅仅比较两张表是否完全一致,而不计较二者的区别。建议下面的方法:
    查询基表/系统视图:sys.tab$,dba_tab_cols,sys.obj$中关于两表的字段信息,主要有:column_name,data_type,data_length,data_precision,data_scale等。
    将两表的上述信息分别用sqlldr或其它工具导出成文本文件形式。用操作系统的文件比较工具比较两文本文件是否完全一致。
      

  7.   


    select a.table_name
    from
    (
      select table_name, sum(seqid) as allcolsid 
      from user_tab_columns a,
      (
        select column_name,rownum+1 as seqid from
        (
          select distinct column_name from user_tab_columns
        )  
      ) b
      where a.COLUMN_NAME=b.column_name
      group by table_name
    ) a,
    (
      select table_name, sum(seqid) as allcolsid 
      from user_tab_columns a,
      (
        select column_name,rownum+1 as seqid from
        (
          select distinct column_name from user_tab_columns
        )  
      ) b
      where a.COLUMN_NAME=b.column_name and a.TABLE_NAME='你的表名' 
      group by TABLE_NAME
    ) b
    where a.allcolsid=b.allcolsid;
      

  8.   

    原理很简单,给每个字段都设置一个唯一数值型编号,然后,将你指定表的字段编号相加。然后,再将系统中的所有用户表的字段编号相加。最后,汇总字段编号相同的,就是你要查找的表。如果,你说的表结构,不仅仅是字段名,还包含了字段类型及长度的话,可以稍微修改一下,替换为:
    select distinct column_name||data_type as column_name from user_tab_columns如果包含字段长度,方法同理