• ベストアンサー

複数テーブルのリレーションについて

こんにちは。 oracleの複数テーブルのリレーションについてご教示頂け ないでしょうか? 実現したいことは下記の通りです。 ■oracleのバージョン oracle 8i 言語 VS2005 VB.net ■実現したいこと  下記の(1)の抽出条件で絞り込んだ(2)の情報を表示 (1)抽出条件  (1)【Table A】の【更新日時】が指定の日時と合致する  (2)【Table A】の【入力者ID】にひもずく     【Table C】の【区分名称】が 指定されたものと合致する (2)表示したいカラム  (1)【Table A】の【入力者ID】に該当する【Table B】の【名前】  (2)【Table A】の【修正者ID】に該当する【Table B】の【名前】 ■■■■■■具体例です■■■■■■■■■■■■■■■■■■■ 各テーブルに以下のようなデータが入力されている場合 画面から下記(1)・(2)の抽出条件がが選択された場合 下記の内容を表示したいと考えています。 ■抽出条件 (1)日時=20009/06/12 (2)区分名称=テスト ■表示結果 入力者 :001-山田 修正者 :002-田中 更新日時:20009/06/12 【Table A】 | 入力者ID | 修正者ID | 更新日時 | ------------------------------------- | 001 | 002 | 20009/06/12 | | 003 | 002 | 20009/06/12 | 【Table B】 | ID | 名前 | 区分NO | ----------------------------- | 001 | 山田 | 1 | | 002 | 田中 | 2 | | 003 | 鈴木 | 2 | 【Table C】 | 区分NO | 区分名称 | ---------------------- | 1 | テスト | | 2 | 本番 | ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 現状以下の方向で進めようとしてるのですが、 これだと「区分名称=テスト」という抽出条件が 追加できずに困っています。 select * from 【Table A】 INNER JOIN 【Table B】 B_1 ON (【Table A】.入力者ID = B_1.ID) INNER JOIN 【Table B】 B_2 ON (【Table A】.修正者ID = B_2.ID) Where 【Table A】.更新日時 = '20009/06/12' 以上、宜しくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada404
  • ベストアンサー率56% (9/16)
回答No.2

これでどうでしょうか。 select * from 【Table A】 INNER JOIN 【Table B】 B_1 (【Table A】.入力者ID = B_1.ID) INNER JOIN 【Table B】 B_2 (【Table A】.修正者ID = B_2.ID) INNER JOIN 【Table C】 ( B_1.区分NO = 【Table C】.区分NO) where 【Table A】.更新日時 = '20009/06/12' and 【Table C】.区分名称 = 'テスト'

alp_tomy
質問者

お礼

早速のご回答ありがとうございました。 下記の方法で実装できました。。。 ありがとうございました。(^_^) --------------------------------- select * from 【Table B】B_1 INNER JOIN 【Table C】 C ON (B_1.区分NO= C.区分NO) LEFT OUTER JOIN 【Table A】 A ON (A.入力者ID = B_1.ID) LEFT OUTER JOIN 【Table B】 B_2 ON (A.修正者ID = B_2.ID) Where 【Table A】.更新日時 = '20009/06/12' AND C.区分名称 = 'テスト'

その他の回答 (1)

  • Idler999
  • ベストアンサー率27% (63/231)
回答No.1

区分名称ではなく、区分No.が抽出条件の方が良いと思いますが、それはおいといて。(区分名称で一意になるのですよね?) 区分名称から絞っていった方が良いと思います。 まず、区分名称「テスト」に該当するCの区分No.を持つBを抽出。・・・B’ B’のIDが、入力者IDに含まれるAを抽出・・・A’ A’の中から、更新日時が「○月×日」のレコードを抽出し、IDでBから入力者と修正者の名前を持ってくる。 一文にすると複雑になるのでSQLを分けても良いと思います。

alp_tomy
質問者

お礼

早速のご回答ありがとうございました。 下記の方法で実装できました。。。 ありがとうございました。(^_^) --------------------------------- select * from 【Table B】B_1 INNER JOIN 【Table C】 C ON (B_1.区分NO= C.区分NO) LEFT OUTER JOIN 【Table A】 A ON (A.入力者ID = B_1.ID) LEFT OUTER JOIN 【Table B】 B_2 ON (A.修正者ID = B_2.ID) Where 【Table A】.更新日時 = '20009/06/12' AND C.区分名称 = 'テスト'

関連するQ&A