こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

SQL文を教えてください。

社員テーブルと障害テーブルA、Bがあります。

社員テーブル(社員ID、発見者名、・・・etc)
障害テーブルA(障害番号、発生日、・・・etc)
障害テーブルB(事象、ステータス、対応内容、・・・etc)

社員ID、障害番号、事象、ステータスのSELECT結果を
一つのcsvファイルとして取得するプログラムを作成したいのです。
「複数のテーブルから」「任意の」列を指定して、
検索結果を「csvに出力」する方法がどうしても分かりません。

どのようなSQLになるでしょうか?
うまく伝わっているでしょうか?

よろしくお願いします。

投稿日時 - 2011-03-20 17:12:22

QNo.6606936

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

>ですので、意味や要素の関係性は度外視して下さい。

 残念ですが、この言葉が、この文脈で出てくる時点で、データベースの意味・しくみ・使い方の基本の基本が出来ていないと判断せざるを得ません。
 なぜなら、本来、テーブルの構造というのは、フィールドの意味とフィールド間の関係を定義したものです。検索を含む全てのデータベース操作は、テーブルの構造に依存して行われるものです。
 というわけで

>要点は
>(1) 複数のテーブルから
>(2) それぞれ任意の列を指定して検索、
>(3) その結果を結合した一覧を1つのCSVファイルに出力

 これに答えるためには、あなたが「度外視してください」と言われるそこに全てのポイントがあるんです。

 フィールドの意味も関係も、テーブルの構造も解らずにSQLをはじめとするデータベース操作全般を一般論として解説せよという質問でしたら、それこそ本になりますので、ここで解説することは不可能です。
 
 アドヴァイスとしては、データベースの入門書から勉強されることをお勧めします。このデータベースの分野に関しては、断片的な知識だけで利用できるほど単純なものではなかったりしますので。

投稿日時 - 2011-03-22 21:21:22

ANo.5

やはり、まだ答えることは難しいです。
キーというのは1つのテーブルの中でレコードを1意に決めるものです。
しかし、2つのテーブルを結合した場合、キーの結合には
1体1、1対多、多対1の3通りがあるのです。

もし、1体1の結合ができているのならば、レコードの数はキーが
一致している数になり、基本的に1つのテーブルと同じように
データの取得やや更新、挿入ができます。
しかし、1体多の場合は、レコード数が多くなり、レコードの取得は
できても更新や挿入ができないのが普通です。

もし、取得だけが目的であり、1意の共通したキーがあるのならばビューを
作ってみてはどうでしょうか。それならば複数のテーブルにあるフィールドが
1つのテーブルにあるように操作できます。

投稿日時 - 2011-03-21 01:48:32

ANo.4

仮のテーブル、仮の列名、どの項目がキーなのかもわからないのではSQLは書けないのでは?

ちなみに同じ質問をされているみたいですけど
http://okwave.jp/qa/q6606965.html

早々に閉めきるか、管理に言って削除してもらってください。

投稿日時 - 2011-03-21 00:13:10

ANo.3

短時間にNo.1の方と同じような回答になりましたが、
ほぼテーブル設計ミスが確定したと言えるでしょう。

私が怪しいと思ったのは
社員テーブル(社員ID、発見者名、・・・etc)です。
写真IDの次は社員名でないといけないはずです。
発見者というのは障害の発見者と推測しますが、これは
障害テーブルに持つべきデータです。

また、障害テーブルBにはレコードを一意に決めるID自体が
存在しないようです。AとBは同じテーブルでいいのでは
ないでしょうか?

社員データと障害データがどのゆおに結びつくのかわかりませんが、
多分、障害データに社員IDを持たせないといけないはずです。

ところで、お使いのDBは何でしょうか?
Accessでしょうか?Oracleでしょうか?
それによってもSQLは微妙に異なります。

投稿日時 - 2011-03-20 17:54:18

補足

すみません、質問の仕方が良くなかったですね。

上記に挙げたテーブルの中身はあくまで例であり、
実際は"発見者名"や"事象"といった列名ではありません。
実データが手元になく、仮の列名で質問させていただいています。
ですので、意味や要素の関係性は度外視して下さい。

要点は

(1) 複数のテーブルから
(2) それぞれ任意の列を指定して検索、
(3) その結果を結合した一覧を1つのCSVファイルに出力

この一連の処理を行う1本のプログラムを作りたいのですが、
経験が浅くてどうにも難しく、詰まってしまったのです。

キー項目はそれぞれのテーブルに存在していますので、
『~XXXX [キー1]』等と代入して考えられるように
ご説明いただければ、非常に助かります。

使用環境は、
OS:UNIX
DB:Oracle
です。

質問もへたくそで申し訳ありませんが、よろしくお願いします。

投稿日時 - 2011-03-20 23:28:52

ANo.2

SQL文は
Select 社員ID、障害番号、事象、ステータス
from 写真テーブル,障害テーブルA,障害テーブルB
でできます。

しかし、これでは全テーブルのデータを積算した数のレコードが
発生します。例えば、社員テーブルが1000件、障害テーブルAが600件、
障害テーブルBが300件であったとき、全レコードは1億8000万件に
なってしまいます。

ですから、テーブル設計時にこれらをつなぐキーを決めておかなければ
ならないのです。これらはいったいどのフィールドでつながるデータ
でしょうか?

投稿日時 - 2011-03-20 17:41:23

ANo.1

「うまく伝わっているでしょうか?」
伝わっていません。

「どのようなSQLになるでしょうか?」
障害テーブルAに項目として、「社員ID」がありますか?
障害テーブルBに項目として、「障害番号」がありますか?
無いなら、データを関連づける(リレーションする)項目がないので、取り出しようがありません。テーブルの設計ミスです。

投稿日時 - 2011-03-20 17:37:34

あなたにオススメの質問