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

例えば、テーブルが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はオラクルです。)

A 回答 (4件)

ORACLE御使用ということで、それなりのスキルがあるはず。


と勝手決めして、キーワードだけ。
"UNION"です。
複数のSQLで返るレコードを結合して返すSQL命令です。
    • good
    • 1

#1です、失礼しました。


共通項目をすべて表示ではなく、共通項目で条件検索なのですね。
UNIONは前者には使えても、後者には使えません。
忘れてください。
    • good
    • 0
この回答へのお礼

いえいえ。
それと、UNIONはどの表も同じ列数じゃないといけないんですよね?

私が欲しい情報のテーブルは項目数も違うんです。
A:項目数4
B:項目数8
とか。

そうなると、前者でも駄目ってことですよね?

お礼日時:2003/12/16 19:29

UNIONを使用できないのが、列数だけの問題なら


SELECT [X],[Y],[Z] FROM [A]
SELECT [X],[Y],NULL FROM [B]
のように、列数を揃えることは可能です。
問題は、データ型だとか、結合する意味の方ですね。
例えば、上記で3番目のフィールドがNULLの場合、Bテーブルから取得したデータなので....と、プログラムの方で条件分岐させた場合、UNIONで結合した意味ないじゃん、となってしまいます。
    • good
    • 1
この回答へのお礼

>列数を揃えることは可能です。
★確かにそうですね。

因みに、データ型ですが、これもバラバラです。
なので、UNIONではちょっと駄目でしょう。

sqlだけではやっぱり、駄目っぽいですね。

お礼日時:2003/12/16 20:27

union前提で、出力列の違いは、結果を全て文字列にして、


連結というのはダメ?
select a | ',' | b | ',' | c ... from ...

テーブル名がものすごい数なのは、PL-SQLが使えれば
シェルより簡単かもしれません。
(DBからテーブル名を取得するのも可)
    • good
    • 0
この回答へのお礼

ありがとうございます。
でも、連結はさすがにそれはきついです。
表示内容が数百項目になってしまう・・・

やっぱりシェルとかでやるしかなさそうですね。

お礼日時:2003/12/17 11:46

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

関連するカテゴリからQ&Aを探す