- ベストアンサー
Oracle 10g/11での外部結合について
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
12迄は残すアナウンスが出ているはず。 今現在は動作しているが、~JOINでの記述に切り替える方が良い。
関連するQ&A
- オラクルで外部結合
オラクル8iを使用しています。 テーブルを外部結合する場合のパフォーマンスについてお聞きしたいのですが、 下の二つのSQL文でパフォーマンスは変わってくるのでしょうか? (外部結合記号(+)を=の前後につけた場合) SELECT 項目 FROM テーブル1 A, テーブル2 B WHERE A.項目1 = B.項目1(+); SELECT 項目 FROM テーブル1 A, テーブル2 B WHERE B.項目1(+) = A.項目1;
- ベストアンサー
- その他(データベース)
- 外部結合に条件をつけたい
oracle初心者です。 表A:ID、氏名 表B:ID、入社年、給与 上の表A,Bを、表Aを左辺にしてLEFT JOINする場合に、単純な外部結合では無く、 入社年が2000年以降の表Bのみ結合したい時のSQL文ですが、 select * from 表A LEFT JOIN 表B ON 表A.ID=表B.ID where 表B.入社年 > 2000 または、 select * from 表A,表B where 表A.ID=表B.ID(+) and 表B.入社年 > 2000 のように記述して実行すると、内部結合になってしまいます。 これを(外部結合として)実現するには、どのように記述すればよいでしょうか? 宜しくお願いいたします。
- ベストアンサー
- Oracle
- 巨大テーブルの外部結合
巨大なテーブル同士を結合する際に、みなさんはどのように結合されますか?もっともパフォーマンスのある方法を模索しているところです。 テーブルA:約900万件 テーブルB:約400万件 テーブルAのインデックスはカラム:idです。 テーブルBにはインデックスはありません。 取得したいのはBテーブルに含まれるAテーブルのidの件数です。 select count(id) from B where A.id = B.id なんてやると、数時間かかります。 select count(id) from B where exists(select * from A where A.id = B.id) ですと、約3hぐらいかかりました。 inで実行すると等価結合したときと変わらないぐらいになります。 こういう場合、皆さんはどう結合されていますか? お知恵を拝借できると幸いです。 ちなみにoracle 8iです。 よろしくお願いいたします。
- 締切済み
- Oracle
- 3テーブル外部結合方法について
3つのテーブルを外部結合したいのですが・・・、 こんがらがってしまいました。 A,B,Cの3テーブルがあり、A,B,Cの順に外部結合 (LEFT OUTER JOIN)したいのですが、 A,BのテーブルについてはWhere句の条件指定が 必要です。 Select From (Select AA.a From A AA Where b = xxxx) BB Left Outer Join (Select CC.b From B CC Where c = eeee and BB.a = CC.b) On ???? こんな感じでつまづいてしまいました・・・
- 締切済み
- その他(データベース)
- 外部結合について
外部結合というのは、表と表を結合するという事で FROM句に書くべきことと思うのですが、 なぜWHERE句(カラム毎に指定)で指定するのでしょうか? 例えば、 テーブルA No|Kind|Name| ------------- 1|1 |A | 1|2 |B | 2|1 |C | 2|2 |D | テーブルB No|Kind|Data| ------------- 1|1 |10| 外部結合で SELECT A.No, A.Kind, A.Name, B.Data FROM A,B WHERE A.No = B.No(+) AND A.Kind = B.Kind(+) とすると No|Kind|Name|Data| ------------------ 1|1 |A |10| 1|2 |B |NULL| 2|1 |C |NULL| 2|2 |D |NULL| となります。 A.NoがB.NoになくてもOKで、Kindは 完全に一致しないとだめという意味で SELECT A.No, A.Kind, A.Name, B.Data FROM A,B WHERE A.No = B.No(+) AND A.Kind = B.Kind とした場合、 No|Kind|Name|Data| ------------------ 1|1 |A |10| 2|1 |C |NULL| となるのであれば納得いくのですが、 結果は↓なるようです。 No|Kind|Name|Data| -------------------------- 1|1 |A |10| (+)を一つも付けてない場合と 同じ動作になるようです。 テーブルAとテーブルBを結合するとき、 「外部結合する場合はWHERE句で指定する選択の条件全てに(+)を付ける」 「外部結合をしない場合はWHERE句で指定する選択の条件全てに(+)を付けない」 であれば、カラム毎に外部結合演算子を指定する意味が無いと思うのですが。 どなたか、カラム毎に外部結合演算子を指定する意味をご教授下さい。 宜しくお願いします。
- ベストアンサー
- Oracle
- SQL 外部結合についての質問
SQLの外部結合についての質問です。 今テーブルA,B,Cがあるとします。 AはBに対して外部結合。BはCに対して外部結合 というようにする事は出来ますでしょうか。 SQLを実行してもエラーになります (例) select A.* from A,B,c where A.項目1 = B.項目1 (+) and B.項目2 = C.項目2 (+)
- 締切済み
- Oracle
- 外部結合と等価結合のパフォーマンスの違いについて(ビューの場合)
Oracle10gでのSQL文の違いについて教えて下さい。 前回の質問は、ストアドプロシージャに記述 されていて、バッチとして動かしています。 と書きましたが、ビューの場合のパフォーマンスの違いは どうなるのでしょうか?ビューの場合も同じような現象です。 下記の2つのSQL文は外部結合ありと外部結合なしの違いだけで、 他は変わりありません。 外部結合ありのほうは 結果がすぐに返されるのですが、外部結合なしのほうは 結果が返ってこない、あるいはかなり時間がかかるという 現象が起きています。 SQL文は簡略して記述していますが、SELECT句には、 TO_CHAR()やSUM(CASE WHEN ...THEN ...ELSE...)が使用してあり 少し重くなる処理も含まれています。 この2つのSQL文でパフォーマンスに影響している原因は 何なんでしょうか?オプティマイザとか実行計画とかの 説明を読んだのですが、いまいちよく解りません。。 自分では中級者以下だと思っていますので、わかりやすく 説明して頂けたら助かります。宜しくお願い致します。 (外部結合ありのSQL) SELECT a.項目1, a.項目2, a.項目3, a.項目4, a.項目5 FROM TBL_A a, TBL_B b WHERE a.項目1 = b.項目1(+) AND a.項目2 = b.項目2(+) AND a.項目3 = b.項目3(+) AND a.項目4 = b.項目4(+) AND GROUP BY a.項目1, a.項目2, a.項目3, a.項目4, a.項目5 (外部結合なしのSQL) SELECT a.項目1, a.項目2, a.項目3, a.項目4, a.項目5 FROM TBL_A a, TBL_B b WHERE a.項目1 = b.項目1 AND a.項目2 = b.項目2 AND a.項目3 = b.項目3 AND a.項目4 = b.項目4 AND GROUP BY a.項目1, a.項目2, a.項目3, a.項目4, a.項目5
- ベストアンサー
- Oracle
- オラクル 外部結合についての質問
下記のようなテーブルがある場合に Aテーブル Bテーブル 品目(主) 品目(主) 子品目(主)SEQ パン1 パン1 小麦粉 1 パン1 ジャム 2 パン1 バター 3 結合条件 A.品目 = B.品目 この時に1件のみ取得できるようにしたい。 Bテーブルから取得したいのは、SEQ3のデータ。 SELECT A.品目, B.子品目, SEQ FROM A,B WHERE A.品目 = B.品目(+) とすると、下記3行のデータが取れてしまう。 パン1 小麦粉 1 パン1 ジャム 2 パン1 バター 3 これを↓だけ取得したいのです。 パン1 バター 3 外部結合ではそもそも取得できないのでしょうか? どのようなSQLを書けばいいのか教えてください。
- ベストアンサー
- Oracle
- Oracleの外部結合について
お世話になります。 次のSQLの結果についてわかられる方がいらっしゃればご回答お願いします。 間違っている部分があるのは承知していますが、ひとまずなぜこういう結果になるのかを教えていただきたいです。 SELECT A.KOUMOKU FROM A, B, C, D WHERE A.KOUMOKUNO = B.KOUMOKUNO(+) AND A.KOUMOKUNO = C.KOUMOKUNO(+) AND A.KOUMOKUNO = D.KOUMOKUNO(+) 各テーブルのデータは次のようにします。 A ------------------- KOUMOKUNO KOUMOKU 1 aaa 2 bbb 3 ccc 4 ddd 5 eee ------------------- B,C,D ------------------- KOUMOKUNO KOUMOKU 1 aaa 1 aaa 1 aaa ------------------- この場合、結果が31件となります。 調査した結果、次のような計算をもとに結果が返ってきているようなのです。 Aの4件(Aのみ存在)+(3(Bの件数)×3(Cの件数)×3(Dの件数))=29件 なぜ最後の外部結合でB,C,Dの件数が乗算されるのか教えていただきたいのです。 よろしくお願いします。
- ベストアンサー
- Oracle
お礼
なれていないとJOIN句はすごい面倒で・・。 ありがとうございました。