プロが教える店舗&オフィスのセキュリティ対策術

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などを使ってテーブルの数分クエリ文を書くというのは避けたいと考えています。

このような場合どのようなクエリ文が使えるのでしょうか?

A 回答 (3件)

>>簡単にでもどういうふうに書けるか例を示していただけるとありがたいのですが。

。。

んー。
じゃあこのあたりで。。。?

http://www.dbonline.jp/mysql/view/
http://dev.mysql.com/doc/refman/5.1/ja/create-vi …

作成したビューの中で、unionですべてくっつけておいてやれば、
そのビューに対してselectかけるだけで、全テーブルに対してselectを行ったことと一緒。に出来るようになりますね。

あんまりにもややこしいビューを作ろうとすると制約に引っかかったりとかしますが、今回のような内容ならば問題ないでしょう。
    • good
    • 1
この回答へのお礼

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

お礼日時:2012/08/14 05:48

>「ichinensei」というデータベースにテーブル「1_kumi」「2_kumi」「3_kumi」



ichinenseiというテーブルにkumiというカラムをつくって1,2,3といれる
ようなデータ管理をしないと効率的に処理はできないと思いますが・・・

>テーブルの数分クエリ文を書くというのは避けたい

これだけが目的なら、ビューをつかうとか
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/08/08 02:50

こんちは。



>>(全てのテーブル)に対する検索を1文で済ます方法が分かりません。

無理じゃない?

ストアド(MySQLだと、JOB。でしたっけ?)で、DB内のテーブル情報取得して、
それ元にして、まわしてデータ拾ってくる。
ぐらいなら考えられますが。。。

一文はちょっと。。。


>>なるべくunionなどを使ってテーブルの数分クエリ文を書くというのは避けたいと考えています。

この条件。。。ってことは、テーブル数自体は頻繁に変更されるものではない。
と思いますが、どうでしょう?

それならば、ややこしい(であろう)クエリ文を叩きまくるよりは、ビューでも作ってunionでくっつけておいた方が分かりやすいんじゃないかなぁ。と。
実際のクエリ文叩くときは、ビュー参照するだけですし、一文。になりますし。
(以降はビューの構成更新するだけ。ですし。




後は。。。
自分も、他の方の意見を見てみたいと思います^^;

この回答への補足

>この条件。。。ってことは、テーブル数自体は頻繁に変更されるものではない。
>と思いますが、どうでしょう?
はい。おっしゃるとおりテーブル数は普段変えません。

>それならば、ややこしい(であろう)クエリ文を叩きまくるより
>は、ビューでも作ってunionでくっつけておいた方が分かり
>やすいんじゃないかなぁ。と。
>実際のクエリ文叩くときは、ビュー参照するだけですし、
>一文。になりますし。
ビューというものをこれまで知らなかったので、調べてみようと思います。簡単にでもどういうふうに書けるか例を示していただけるとありがたいのですが。。。

補足日時:2012/08/08 02:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!