(Oracle)加入all_tab_columns和all_cons_columns

时间:2013-09-05 06:09:01

标签: sql oracle metadata sqldatatypes

我一直在尝试找到一种方法来加入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的新手,但我一直在努力寻找解决方案。

1 个答案:

答案 0 :(得分:0)

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

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;