2

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

4

1 回答 1

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;
于 2013-09-05T11:48:12.240 回答