• 締切済み

SQL文を教えてください。

社員テーブルと障害テーブルA、Bがあります。 社員テーブル(社員ID、発見者名、・・・etc) 障害テーブルA(障害番号、発生日、・・・etc) 障害テーブルB(事象、ステータス、対応内容、・・・etc) 社員ID、障害番号、事象、ステータスのSELECT結果を 一つのcsvファイルとして取得するプログラムを作成したいのです。 「複数のテーブルから」「任意の」列を指定して、 検索結果を「csvに出力」する方法がどうしても分かりません。 どのようなSQLになるでしょうか? うまく伝わっているでしょうか? よろしくお願いします。

みんなの回答

  • uresiiwa
  • ベストアンサー率45% (49/107)
回答No.3

1.目的の結果を取得するSQLを作る <例> SELECT 社員テーブル.社員ID, 障害テーブルA.障害番号, 障害テーブルB.事象, 障害テーブルC.ステータス FROM 社員テーブル INNER JOIN 障害テーブルA ON <社員テーブルと障害テーブルAの結合条件(障害テーブルAに発見者社員IDなどの列があるかな?)> INNER JOIN 障害テーブルB ON <障害テーブルAと障害テーブルBの結合条件(障害テーブルBに障害番号の列があるかな?)> ; 2.UNIXサーバ上に以下のようなファイルを作る ================================== spool result.csv <ここに上記SQL文を挿入> quit; ================================== 3.UNIXサーバ上で、SQL*PLUSからSQLファイル実行 $ sqlplus スキーマ名/パスワード <2のファイル名> 3のコマンド実行でresult.csvが作成されるはずです。 あとは、上記コマンドを実行するシェルスクリプトなりを作ればよいかと思います。 こんな感じでよろしかったでしょうか?

  • akr
  • ベストアンサー率18% (32/173)
回答No.2

No.1で回答した者です (1)、(2)が解らないってことは、SELECT文を理解していないってことでしょうか。 大きなお世話かもしれませんが、こういったサイトで小手先の解決をするより、ちゃんと勉強なさったほうが良いと思います。 ピンポイントで解らないことがあるのであれば、回答もし易いのですが、根本的に解ってないようですと、どのレベルから話をすれば伝わるのかが不明ですので手間ばかり掛かりそうです。 例えば、"こんなSQLを書いたけど、こんな結果になってしまった"等があれば、もっと指摘し易いと思います。 偉そうな回答で、お気を悪くしたなら御免なさい。

  • akr
  • ベストアンサー率18% (32/173)
回答No.1

質問の仕方がよろしくない気がします。 複数のテーブルを結合する方法が分からないのか、任意の列の抽出方法が分からないのか、CSV形式に整形する方法が分からないのか、ファイルに出力する方法が分からないのか、どれなんでしょうか。 テーブルの結合やレコードの抽出についてはSELECT文の書き方の問題なので、そのあたりを調べれば問題ないはずです。 ただ、質問にある3つのテーブルは結合する際のキーとなりそうな項目が無さげなので、どう結合するのかが想像出来ませんので、設問の情報に抜けが無いでしょうか? 次に、CSV形式への整形ですが、フィールドとフィールドの間を「 ||,|| 」で括っていけば出来ると思います。 ※出力にクォーテーションが必要な時は付けて下さい。 ファイル出力については、SPOOLコマンドで出来ると思います。 詳細は、ORACLEとSPOOLを検索すれば出てくると思います。

verlnne251
質問者

補足

すみません、質問の仕方が良くなかったですね。 (1) 複数のテーブルから (2) それぞれ任意の列を指定して検索、 (3) その結果を結合した一覧を1つのCSVファイルに出力 この一連の処理を行う1本のプログラムを作りたいのですが、 経験が浅くて理解が難しく、詰まってしまったのです。 どのように書けば(1)~(3)どおりに動作するのかを ご教授いただきたく、質問させていただきました。 上記に挙げたテーブルの中身はあくまで例であり、 実際は"発見者名"や"事象"といった列名ではありません。 実データが手元になく、仮の列名で質問させていただいています。 ですので、意味や要素の関係性は度外視して頂きたいのですが、 キー項目が具体的でないとやはり解説も難しいのでしょうか? 『~XXXX [キー1]』等と代入して考えられるように ご説明いただければ、非常に助かります。 ご指摘いただいたテーブル結合やレコード抽出、 SPOOLの辺りは事前に色々調べてみたのですが、 今回の要件にどう当てはめたら希望するプログラムになるのかが どうしてもわからなかったので、 できればソースの中身を解説いただけると有難いです。 使用環境は、 OS:UNIX DB:Oracle です。 質問もへたくそで申し訳ありませんが、よろしくお願いします。

関連するQ&A