• 締切済み

ちょっと見かけないinner joinについて

どなたか以下の構文について教えて下さい。 どこのDBMSで使用されるものなのでしょう? SELECT B.項目1, B.項目2, A.項目2, A.項目3 FROM ( ( SELECT * FROM Bテーブル WHERE 項目3>"1" ) B INNER JOIN ( SELECT * FROM Aテーブル WHERE 項目2=10 ) A ON B.項目1=A.項目1; 意味はわかるのですが、普通のinner joinとは違うもので。

みんなの回答

回答No.2

「select ~ from (この中で結合)」程度なら、そんなに珍しい問い合わせではなく、複数表から結果を得ようとするとすぐに思いつく程度のものです。 性能に関しては、「どのRDBMSのどのバージョンを使用するか?」やインデクスの付け方により大きく違ってきます。 最低、結合条件の「項目1」には両方の表にインデクスがあるべきだし、Aの「項目2」、Bの「項目B」にもインデクスが必要でしょう。 副問い合わせ内で「*」で全列の結果を得ていますが、最終的には限られた項目しか結果を得ないようになっているので、このケースでは「不要な列は検索しない」、「検索する列にはインデクスを付ける」といった性能対策が可能かも知れません。 各項目に別のインデクスをつけた方がいいのか、「項目1、項目2」といった複数列でインデクスを構成する方がいいのかといったことは、各RDBMS、各バージョンの最適化がどうなっているのかによって違ってきます。

kotokage
質問者

お礼

大変、遅くまでお付き合い頂きありがとうございました。 とても参考になりました。 ありがとうございました。

回答No.1

括弧の対応が取れていないので、構文エラーでは? 「見かけない」、「普通と違う」とは、具体的にどの部分を言っているのですか? 「FROM (副問い合わせ)」は、別に特殊な書き方ではないし、別名の前のASを省略できるのも特殊なことではありません。 MySQLのバージョン5くらい、PostgreSQL、SQL Server等では、構文エラーを無くせば少なくとも動くと思います。

kotokage
質問者

補足

早速のご回答、ありがとうございます。 ご指摘の通り、括弧閉がぬけてますね。 聞きたかったことは、こういった副問い合わせでの結合は、 よく使われるのでしょうか? 私は、今までこのような結合をしたことがなかったので、 特殊なDBMSに依存するものなのかなと思った次第です。 ちなみにこの副問い合わせでの結合は、レスポンスに影響はでないのでしょうか? 申し訳ありませんが、再度ご回答頂けるとありがいです。

関連するQ&A