データベース上の全てのテーブルに対するクエリ

このQ&Aのポイント
  • mySQLでデータベース内の全てのテーブルに対するクエリーに関して質問があります、テーブルの数が数十個ある場合に効果的なクエリ文を知りたい。
  • 全てのテーブルに対しweightを検索キーとして該当するレコードのnameをとってくる方法を教えてください。
  • テーブル数が数十個ある場合、なるべくunionなどを使わずにクエリ文を書く方法はありますか?
回答を見る
  • ベストアンサー

データベース上の全てのテーブルに対するクエリ

mySQLでデータベース内の全てのテーブルに対するクエリーに関して質問があります(mySQL 5.5)。 仮に 「ichinensei」というデータベースにテーブル「1_kumi」「2_kumi」「3_kumi」 .....と複数のテーブルがあるとします。 テーブルは全て同じデータ形式で仮に name (char) | weight (int) という名前と体重の情報が登録されているとします。 やりたいことは全てのテーブルに対しweightを検索キーとして該当するレコードのnameをとってくる、という操作です。 weight(体重)が41,42,43,50,51であるレコードの名前を列挙するためには SELECT name FROM (全てのテーブル) WHERE weight IN (41,42,43,50,51) 上記のようなクエリ文が考えられますが(全てのテーブル)に対する検索を1文で済ます方法が分かりません。 実際の作業ではテーブル数が数十個なのでなるべくunionなどを使ってテーブルの数分クエリ文を書くというのは避けたいと考えています。 このような場合どのようなクエリ文が使えるのでしょうか?

  • MySQL
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.3

>>簡単にでもどういうふうに書けるか例を示していただけるとありがたいのですが。。。 んー。 じゃあこのあたりで。。。? http://www.dbonline.jp/mysql/view/ http://dev.mysql.com/doc/refman/5.1/ja/create-view.html 作成したビューの中で、unionですべてくっつけておいてやれば、 そのビューに対してselectかけるだけで、全テーブルに対してselectを行ったことと一緒。に出来るようになりますね。 あんまりにもややこしいビューを作ろうとすると制約に引っかかったりとかしますが、今回のような内容ならば問題ないでしょう。

hydrozoa
質問者

お礼

大変参考になりました。ありがとうございました。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>「ichinensei」というデータベースにテーブル「1_kumi」「2_kumi」「3_kumi」 ichinenseiというテーブルにkumiというカラムをつくって1,2,3といれる ようなデータ管理をしないと効率的に処理はできないと思いますが・・・ >テーブルの数分クエリ文を書くというのは避けたい これだけが目的なら、ビューをつかうとか

hydrozoa
質問者

お礼

確かにデータ管理の方法が効率的ではないですね。質問させていただいたような方法が可能であれば現状のデータベースで簡単に処理できると思っていたのですが。。。 ビューというのは恥ずかしながら知りませんでした。調べてみます。 ありがとうございました。

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

こんちは。 >>(全てのテーブル)に対する検索を1文で済ます方法が分かりません。 無理じゃない? ストアド(MySQLだと、JOB。でしたっけ?)で、DB内のテーブル情報取得して、 それ元にして、まわしてデータ拾ってくる。 ぐらいなら考えられますが。。。 一文はちょっと。。。 >>なるべくunionなどを使ってテーブルの数分クエリ文を書くというのは避けたいと考えています。 この条件。。。ってことは、テーブル数自体は頻繁に変更されるものではない。 と思いますが、どうでしょう? それならば、ややこしい(であろう)クエリ文を叩きまくるよりは、ビューでも作ってunionでくっつけておいた方が分かりやすいんじゃないかなぁ。と。 実際のクエリ文叩くときは、ビュー参照するだけですし、一文。になりますし。 (以降はビューの構成更新するだけ。ですし。 後は。。。 自分も、他の方の意見を見てみたいと思います^^;

hydrozoa
質問者

補足

>この条件。。。ってことは、テーブル数自体は頻繁に変更されるものではない。 >と思いますが、どうでしょう? はい。おっしゃるとおりテーブル数は普段変えません。 >それならば、ややこしい(であろう)クエリ文を叩きまくるより >は、ビューでも作ってunionでくっつけておいた方が分かり >やすいんじゃないかなぁ。と。 >実際のクエリ文叩くときは、ビュー参照するだけですし、 >一文。になりますし。 ビューというものをこれまで知らなかったので、調べてみようと思います。簡単にでもどういうふうに書けるか例を示していただけるとありがたいのですが。。。

関連するQ&A

  • ACCESSユニオンクエリから新テーブルを

    ACCESS2007/2010で、ユニオンクエリ(10個のテーブルをつないだ)から新テーブルを作りたいのですが、検索で調べて、なかなかピタリと説明してくれているサイトが見つかりません。。。 「ユニオンクエリ01」の指定 作成-クエリデザイン、閉じる、テーブルの作成 辺りをいじるんだと思われますが、 どなたか正確にナビして頂けませんでしょうか?

  • データベースの設計について少し疑問が出たので投稿しました。

    データベースの設計について少し疑問が出たので投稿しました。 数千万レコードを取り扱う場合、以下のどの構成が一番クエリを早く実行できるのでしょうか? 1.1つのデータベースに1つのテーブルを構築して全てのレコードを格納。 2.1つのデータベース内に複数のテーブルを構築して、レコードを分散して格納。 3.複数のデータベースにそれぞれ1つのテーブルを構築して、レコードを分散して格納。 データベースはMySQLです。 参考までに、ご意見をお聞かせいただければと思います。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • ユニオンクエリについて

    複数のファイルにあるテーブルを使って、ユニオンクエリを作りたいと思っています。 他のデータベース内のテーブルを参照して、ユニオンクエリを組めるものでしょうか?やはり同じファイルにあるテーブル同士でなければだめですか? こちら初心者で、聞き方もおかしいかもしれませんが、よろしくお願いいたします。

  • 二つのテーブルを一つのクエリにまとめる方法

     ACCESS2000、ウィンドウズ98です。  二つのデーターベースがあり、まったく同じ名前・すべてのフィールド名も型もプロパティも同一の(COPYなので)テーブルを有しています。  第三のデーターベースを作り、そこに二つのテーブルをまとめたテーブルかクエリーを作る方法(校舎が二つあって、それぞれ違う子供達のデータなのです)がありましたら教えてください。  外部リンクの方法は知っております。

  • ユニオンクエリで繋げられるテーブル(クエリ)の上限の個数は?

    access2003です。 ユニオンクエリで繋げられるテーブル(クエリ)の上限の個数はいくつなんでしょうか? またSQL文は1024文字越すとエラーになるのでしょうか? よろしくお願い致します。

  • データベースのテーブルやカラム情報の取得

    データベースの定義を取得するSQL文を教えてください。 データベースはAccessとMySQLです。 得たい情報はデータベースにあるテーブルとカラムです。 例えば、テーブルがTblAとTblBがあって、 それぞれに整数型のFld1と文字型のFlb2があるとします。 この定義情報を取得したいのです。 テーブルだけでなくクエリ(ビュー)の定義情報も取得できるでしょうか。

    • ベストアンサー
    • MySQL
  • テーブル作成クエリとデータベースの分割

    当方、Accessは全くの素人ですが、急遽Accessにて連絡先台帳を 作ることとなりました。 参考書を片手に、なんとかそれ相応のものになってきましたが、 表題部分にて四苦八苦しております。 どうぞ、ご教授のほどよろしくお願いします。 まず、連絡先テーブルを作成しました。 この中には個人名、会社名、住所などを入力するようにしました。 会社名の中には複数のレコードがあるため、個人向けではなく、会社向けの 送付用のラベルを作成したいと思い、テーブル作成クエリを用いて 会社テーブルを作成しました。 上記テーブルから、ラベル作成までは何とかできるようになりましたが、 複数のユーザーがこのデータベースを使うため、データベースの分割をし 運用したいのです。 また、この会社テーブルを別のデータベースでも使用したいと思っております。 ツールを用いて、データベースの分割はできましたが、新たな連絡先が 追加されたときなど、再度テーブル作成クエリを実行してしまうと、リンクが 外れてしまいます。 外部データからリンクテーブルを作りなおすと、以前のデータのままなので、 分割したデータベースを更新しなければならないことはわかりましたが、 その方法が全くわかりません。 できれば、更新ボタンを押した際に、 テーブル作成クエリを起動して、テーブルを作成し、分割したデータベースを 更新させたいのですが、何か良い方法はございませんでしょうか? 他の方法でも全く問題ありません。 VBAやマクロでも構いません。 ただ、VBAもマクロも殆どわかりませんので、できればコード等を記載して いただけると助かります。 Access2007を用いております。 どうぞよろしくお願いします。

  • 巨大なデータに対する検索に適したデータベース

    巨大なデータベースに対する検索をなるべく高速にこなせるフリーのデータベースを探しています(windows)。 これまでmySQL5.5を使って比較的簡単なデータ検索を行ってきました。 データ構造自体は簡単で例えば下記のように name[char] / weight_gram[int] / country [char] 数桁のintと十数文字の文字列情報をもつエントリーで構成されるテーブルとします。 ただ問題がデータの量で、ある事情で10-100億件のエントリー(rows)があり、そのせいで単純なクエリー、例えば select * from my_big_table where weight in (51000,60000,82000) のような簡単な検索にも非常に時間がかかります。 パーティショニング、インデクスを試し、速度は向上しましたがまだ時間がかかりすぎてしまいます(数分)。 最近になってnoSQLのことを知り。その多くは大量のデータ処理に適していると聞き、簡単な比較なども見ましたがどれが最適なのかいまいちよく分かりません。 特に大半がunix/linux環境用でwindowsで利用可能なものは限られているようです。 そこで -Windows 7/vista 64 bitで動く -フリーで利用できる -大量のデータをもつテーブルに対するquery(検索)が高速 -C++ API (mysql connectorのようなもの)がある の条件に合うnoSQLを教えていただけないでしょうか。

  • MySQLで特定の条件のレコードをテーブルから検索するクエリ文がわかり

    MySQLで特定の条件のレコードをテーブルから検索するクエリ文がわかりません。 テーブルの構造は以下のとおりとします。 member_id INT post_no INT goods_no INT 上記のテーブルから、複数のgoods_noが指定された時(指定されるgoods_noは1個から10個までの間とします)それらの指定された値をすべて含むmember_idとpost_noの組み合わせをすべて検索したいのです。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • テーブルを結合して新規にテーブルに・・・

    アクセス2003でSQLを組んでデータベースを作っています。 まず、ユニオンクエリを使ってAクエリとBクエリを結合しました。 この結合したものを新規にテーブルを作成したいのですが、どうすれば良いでしょうか? 手順を教えて頂ければ幸いです。 よろしくお願いします。