1

データベース全体で少なくとも 10 回使用されたデータ型の名前と、それらが使用されたさまざまなテーブルの数を後者の順に表示したいと考えています。いじりながら、私はこの点に到達しました:

select data_type, count(distinct table_name) "count"
from all_tab_cols
group by data_type
having count(*) >= 10
order by "count" desc;

出力あり

VARCHAR2 1920
NUMBER   1435
...

ビューなどが含まれており、データベースには125個のテーブルしかないため、これは間違っています。しかし、私が試してみると

select data_type, (select count(distinct t.table_name)
                   from all_tables t
                   where t.table_name in table_name) "count"
from all_tab_cols
group by data_type
having count(*) >= 10
order by "count" desc;

私は得る

LONG         125
SDO_GEOMETRY 125
... and so on

これも間違っています。明らかに、これはサブクエリ、より具体的なwhere句によるものです。table_name現在のグループのテーブル名だけが含まれていると思いましたか? 私の考えに何か問題がありますか?これをどのように解決しますか?

FWIW、これは宿題なので、大まかな指針で十分です。インターネット映画データベースのクローンを使用しています。

4

1 に答える 1

1

私は参加all_tab_columnsall_tablesます-それはテーブル以外の情報を除外します:

select data_type, count(distinct table_name) "count"
from all_tab_cols
inner join all_tables using (owner, table_name)
group by data_type
having count(*) >= 10
order by "count" desc;

ここでは「自然結合」を使用しました ( using ...)。それは、はるかに簡単だったからです :)

于 2013-06-14T18:40:56.250 に答える