tadano____
@tadano____ (tadano)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

テーブル名を検索結果と一緒に出力する方法

テーブル名を検索結果に出力したいです。
出席番号と名前を持ったテーブルがクラス分あり、
そのテーブルから同じクラスで同じ名前の人が何人いるかを出したいです。
出力したい結果としては、クラス、名前、人数を出せると良いです。

例)
class_1テーブル
出席番号 名前
ーーーーーーーーー
1    高橋さん
2    田中さん
3    田村さん

class_2テーブル
出席番号 名前
ーーーーーーーーー
1    田村さん
2    中村さん
3    中村さん

■期待検索結果
下記のようにテーブル名と名前と件数を表示させたいです。
テーブル名 名前   件数
ーーーーーーーーーーーーー
class_1  髙橋さん  1
class_1  田中さん  1
class_1  田村さん  1
class_2  田村さん  1
class_2  中村さん  2

user_tablesを使ってテーブル名を取得することはできたが、
そのテーブル名をいれて
select table_name, 名前, count(*) from user_tables where 検索したテーブル名 group by table_name;
など試してみたが、名前が無効な識別しです。となり検索できませんでした。
ご教示いただけますと助かります。

0

2Answer

クラスごとにテーブルを分けるのはいい設計ではありませんが……

テーブル名が決め打ちでよければ以下のクエリで検索できると思います。他にもクラスがあるなら union all でつなげていけばいいです。

select table_name, "名前", count(*) from (
  select 'class_1' as table_name, "名前" from class_1
  union all
  select 'class_2' as table_name, "名前" from class_2
)
group by table_name, "名前";
0Like

Comments

  1. @tadano____

    Questioner

    ご回答ありがとうございます。
    まだまだ分からないことだらけで、
    例が思い付かず、いけてないテーブルになってしまいました。

    テーブル数が多く、union all でつなげるという方法は大変そうでしたので、
    なにか方法を教えていただけますと助かります。

    select table_name from user_tables where table_name like 'class_%';
    のようにテーブル名を検索したのですが、その検索結果を使えたら良いなと思いました。
  2. 検索で動的に得たテーブル名から select するようなクエリは SQL の仕様的に書けません。どうしてもやるなら検索結果を使ってクエリ文字列を組み立てることになります。

    テーブルが10個や20個ならキストエディタで手書きで union all を繋げるのが一番早いです。100個単位ならエディタマクロかスクリプト言語を使った方がいいでしょう。
  3. @tadano____

    Questioner

    ありがとうございます。
    50個くらいなので、テキストでつなげてみます。

クラスごとにテーブル分けるのではなく、一つのテーブルに入れてパーティション分割しなさい。というのは置いておいて。

私ならPL/SQLで動的SQL実行する関数作ってそれを呼び出しにするかと思います。

user_tablesのカーソル開いてフェッチしながらUNION ALLでつないでいくSQLを作ってDBMS_SQL.EXECUTEで実行するイメージですね。

0Like

Your answer might help someone💌