- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:from...where を from...join..on にするには)
from...whereをfrom...join..onにする方法
このQ&Aのポイント
- あるSQL文のfrom...where句をfrom...join...on句に書き直したい場合、fetch first 1 row onlyが難しいポイントですが、パフォーマンスの問題を考慮しつつ解決法を見つけていきましょう。
- from...where句で書かれたSQL文をfrom...join...on句に書き換えるには、fetch first 1 row onlyの扱いが難しいですが、適切な解決方法を見つけることで問題を解消できます。
- SQL文のfrom...where句をfrom...join...on句に変換する場合、fetch first 1 row onlyの存在が難点ですが、パフォーマンスを損なわずに解決策を見つけましょう。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
on句は結合条件でfetch firstは抽出条件なのでwhere句をon句にする単純な書き直 しはできないと思います。やるとしたら副選択のselect文をfrom句に書いて一時テーブルとしてfetch firstをdistinctにするしかないような気がします select X.col1, U.col1 from (select distinct B.REC_NO from TABLE_A as A, TABLE_B as B where A.ITME = B.ITEM and X.DATA = A.DATA) as Z inner join TABLE_X as X on ... inner join TABLE_U as U on ... fetch first にくらべて distinct なので遅いような気がしますが 実際には副選択がないためにそための内部的に作られる一時表が軽くなるのでこちらのほうが速いと思います。
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
回答No.1
IBMのDB2のSQLですか? 書き直す理由は? →書き直す方法があっても、特定のRDBMSの独自機能を含んでいたら意味がないのですよね? >fetch first を除いて select distinct としても >同じ結果となりますがパフォーマンスがひどく低下 1対nになるのは、どの表、どの条件式ですか? インデクスを定義しても、実用に耐えない状況ですか?
質問者
お礼
DB2のSQLです。 研究あるいは挑戦です(笑)。 できないならしょうがないのであきらめます。
お礼
このとおりに試したら数倍速くなりました。 びっくりです。 一時表の作られ方を考えないといけないですね。 ありがとうございました。