Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于比较Oracle中多个表中的列的查询_Oracle - Fatal编程技术网

用于比较Oracle中多个表中的列的查询

用于比较Oracle中多个表中的列的查询,oracle,Oracle,我有3个表,它们具有相似的列和相同的主键,让我们称它们为表T1、T2和T3。 这些表的列数并不完全相同,但所有3个表中都存在一些列 我希望能够,给定T1、T2和T3的表名: 列出(T1+T2+T3)中的所有列 对于每一列,我希望看到: 对于每个表,如果它们存在或不存在 如果存在,则其值(*) 各表中各值的比较(*) (*)用于特定记录 如下所示,其中“-”表示该表不存在该列: Column T1 T2 T3 Comparison -------

我有3个表,它们具有相似的列和相同的主键,让我们称它们为表T1、T2和T3。 这些表的列数并不完全相同,但所有3个表中都存在一些列

我希望能够,给定T1、T2和T3的表名:

  • 列出(T1+T2+T3)中的所有列
  • 对于每一列,我希望看到:
    • 对于每个表,如果它们存在或不存在
    • 如果存在,则其值(*)
    • 各表中各值的比较(*)
  • (*)用于特定记录

    如下所示,其中“-”表示该表不存在该列:

    Column         T1     T2     T3      Comparison
    -------        ----   ----   ----    ----------
    C1             "A"    "A"    "A"     EQUAL
    C2             -      "B"    "B"     DIFFERENT
    C3             "C"    null   "C"     DIFFERENT
    C4             "D"    "E"    "F"     DIFFERENT
    C5             -      "G"     -      DIFFERENT
    C6             null   null    null   EQUAL
    

    有什么办法吗?

    我可以帮你解决第一部分。如果每个表中都有该列,则会用“X”标记

    select column_name
          ,max(case when owner = 'schema' and table_name = 'T1' then 'X' end) as t1
          ,max(case when owner = 'schema' and table_name = 'T2' then 'X' end) as t2
          ,max(case when owner = 'schema' and table_name = 'T3' then 'X' end) as t3
      from all_tab_columns
     where (owner = 'schema' and table_name = 'T1')
        or (owner = 'schema' and table_name = 'T2')
        or (owner = 'schema' and table_name = 'T3')
     group 
        by column_name;
    

    T1/C1=“A”表示T1中的所有行在C1列中具有相同的值,即字符串“A”?这当然是一个罕见的案例。通常一列中会有许多不同的值。这就是
    null
    所代表的吗?是的。。。但是您可以查询
    ALL\u TAB\u COLUMNS
    dictionary表中这些表的条目,以获得列列表。。。。然后,您可以连接它来比较表中的列,并将其转换为您的格式。
    PIVOT
    。。。。然后,您需要动态SQL来比较这些值—假设每个表中有多行,您希望如何执行比较?很抱歉造成混淆,我忘了提到示例中显示的值是针对特定记录的。我编辑了原始问题以澄清这一点。谢谢@Ronnis,这确实解决了部分问题!