【问题标题】:(Oracle) Joining all_tab_columns and all_cons_columns(Oracle) 加入 all_tab_columns 和 all_cons_columns
【发布时间】:2013-09-05 06:09:01
【问题描述】:

我一直在尝试找到一种方法来在 Oracle 中加入 all_tab_columnsall_cons_columns,以便我可以提取架构中每种数据类型的列数以及这些列所采用的约束数的信息参与。我能够通过以下查询提取有关表名和每种数据类型的列数的信息:

SELECT DISTINCT atc.TABLE_NAME, 
       atc.DATA_TYPE, 
       COUNT(atc.DATA_TYPE)
  FROM all_tab_columns atc
 WHERE atc.OWNER = 'PARRANDEROS'
 GROUP BY atc.DATA_TYPE, 
          atc.TABLE_NAME

但是当尝试从all_cons_columns 添加信息时,一切都会变得混乱。这是想到的查询,但结果没有意义:

SELECT DISTINCT atc.TABLE_NAME, 
                atc.DATA_TYPE, 
                COUNT(acc.COLUMN_NAME), 
                COUNT(atc.DATA_TYPE)
 FROM all_tab_columns atc 
INNER JOIN all_cons_columns acc 
   ON acc.COLUMN_NAME = atc.COLUMN_NAME AND 
      acc.TABLE_NAME = atc.TABLE_NAME
WHERE atc.OWNER = 'PARRANDEROS'
GROUP BY atc.DATA_TYPE, 
         atc.TABLE_NAME, 
         acc.COLUMN_NAME

如果我不够清楚,请告诉我。我对 SQL 很陌生,但一直在努力寻找解决方案。

【问题讨论】:

    标签: sql oracle metadata sqldatatypes


    【解决方案1】:

    我不明白这些信息会给你带来什么,也许如果你解释一下你打算得到什么,我们可以以更好的方式提供帮助。无论如何,我认为您想要的选择就是这个。希望这会有所帮助。

    SELECT atc.TABLE_NAME, 
           atc.DATA_TYPE, 
           count(distinct atc.column_name) cols, 
           count(distinct acc.constraint_name) cons
     FROM all_tab_columns atc 
    INNER JOIN all_cons_columns acc 
       ON acc.COLUMN_NAME = atc.COLUMN_NAME AND 
          acc.TABLE_NAME = atc.TABLE_NAME
    WHERE atc.OWNER = 'PARRANDEROS'
    GROUP BY atc.DATA_TYPE, 
             atc.TABLE_NAME;
    

    【讨论】:

    • 莱昂纳多,非常感谢。我只需要获取此统计信息即可生成我需要对数据库元数据进行的报告。似乎我真的用 distinct 关键字和 group by 子句搞砸了。现在我真的明白了。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多