• ベストアンサー

結合について

次のようなテーブルがあるとします。 Table A No,Date,member_A,member_B 1 ,0102 ,1001 ,1003 2 ,0212 ,1091 ,1023 3 ,0403 ,1056 ,1065 Table B member ,Name 1001 ,Taro 1002 ,Takashi 1003 ,Yutaka といった具合のテーブルがあるとします。 やりたい事はTable AのNoを指定されたらDateとmember_Aとmember_BのNameを取得したいのです。 例えば、No1を指定したら、0102 ,Taro ,Yutakaといった具合に・・・。1発で取得するにはどういったSQLになりますか?どなたかご教授願います。よろしくお願いします。

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

  • ベストアンサー
  • fu_u_ka_i
  • ベストアンサー率51% (15/29)
回答No.4

>#3 TbaleAのNoは、ユニークな要素であると断定できる記述はないのだが... WHEREが書かれてないので、Noが重複を認めるとき、 例えば、No=1が3件該当するとしたら、問い合わせ結果が 9レコードになって、3倍おいしい? 一般的に、9i以上なら、#1で良いし、古いオラクルなら #2が一般的でしょう。 また、8i以降のオラクルであれば.. select No, (select Name from B where member_A=member) NameA, (select Name from B where member_B=member) NameB from A where No=? ; のような、フィールドリスト上のサブクエリも使えます。

その他の回答 (3)

  • nopo3
  • ベストアンサー率40% (8/20)
回答No.3

環境がないんで、試してないんですけど、、、。 No値を外に出してもいいと思いますが、スピード性能はこちらの方が速いかな。(TABLE内のデータ件数によるかな。) ################################################## SELECT C1.Date, C2.Name, C2.Name FROM (SELECT * FROM A, B WHERE member_A=member AND No=&No) C1, (SELECT * FROM A, B WHERE member_B=member AND No=&No) C2

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

select Date, B1.Name, B2.Name from A, B B1, B B2 where member_A = B1.member and member_B = B2.member and No = 1

  • 7sWild
  • ベストアンサー率0% (0/2)
回答No.1

確認してないので、ぱっと見た目ですが select a.date, b.name, c.name from TableA a inner join TableB b on (a.member_A=b.member) inner join TableB c on (a.member_B=c.member) where a.No = :No で如何でしょうか?

関連するQ&A