- ベストアンサー
複数のテーブルから同じ条件で検索したい。
例えば、テーブルがA,B,C,Dとあって、レイアウトはそれぞれ違います。 ですが、全てのテーブルに共通の項目もあります。 共通項目名:FLG このような前提で、 A,B,C,Dのデータを同じ検索条件で全ての内容を表示させたいのですができませんか? ベタに書くと select * from A where FLG='2'; select * from B where FLG='2'; select * from C where FLG='2'; select * from D where FLG='2'; と言う感じで結果を表示させたいのです。 実際にはテーブル名がものすごい数なので、ベタに書きたくないので、この部分をtab テーブルのtnameとかを使っていっぺんに検索結果が出せればありがたいのですけが・・・ こういうのはシェルとか使わないとだめですかね?(DBはオラクルです。)
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
UNIONを使用できないのが、列数だけの問題なら SELECT [X],[Y],[Z] FROM [A] SELECT [X],[Y],NULL FROM [B] のように、列数を揃えることは可能です。 問題は、データ型だとか、結合する意味の方ですね。 例えば、上記で3番目のフィールドがNULLの場合、Bテーブルから取得したデータなので....と、プログラムの方で条件分岐させた場合、UNIONで結合した意味ないじゃん、となってしまいます。
その他の回答 (3)
- bikkuri
- ベストアンサー率33% (23/68)
union前提で、出力列の違いは、結果を全て文字列にして、 連結というのはダメ? select a | ',' | b | ',' | c ... from ... テーブル名がものすごい数なのは、PL-SQLが使えれば シェルより簡単かもしれません。 (DBからテーブル名を取得するのも可)
お礼
ありがとうございます。 でも、連結はさすがにそれはきついです。 表示内容が数百項目になってしまう・・・ やっぱりシェルとかでやるしかなさそうですね。
- BellBell
- ベストアンサー率54% (327/598)
#1です、失礼しました。 共通項目をすべて表示ではなく、共通項目で条件検索なのですね。 UNIONは前者には使えても、後者には使えません。 忘れてください。
お礼
いえいえ。 それと、UNIONはどの表も同じ列数じゃないといけないんですよね? 私が欲しい情報のテーブルは項目数も違うんです。 A:項目数4 B:項目数8 とか。 そうなると、前者でも駄目ってことですよね?
- BellBell
- ベストアンサー率54% (327/598)
ORACLE御使用ということで、それなりのスキルがあるはず。 と勝手決めして、キーワードだけ。 "UNION"です。 複数のSQLで返るレコードを結合して返すSQL命令です。
お礼
>列数を揃えることは可能です。 ★確かにそうですね。 因みに、データ型ですが、これもバラバラです。 なので、UNIONではちょっと駄目でしょう。 sqlだけではやっぱり、駄目っぽいですね。