- ベストアンサー
結合について
次のようなテーブルがあるとします。 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になりますか?どなたかご教授願います。よろしくお願いします。
- みんなの回答 (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値を外に出してもいいと思いますが、スピード性能はこちらの方が速いかな。(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)
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)
確認してないので、ぱっと見た目ですが 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 で如何でしょうか?