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