SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Oracle SQLアンチパターンの問題集

OracleのSQLのアンチパターンの問題集2

from句のテーブル数を減らす

ダウンロード SourceCode (1.1 KB)

3. 自テーブルを参照するSQLのアンチパターン

 自テーブルを参照するSQLを考えます。サンプルデータと修正対象のSQLと出力結果は下記です。

SelfRef
ID Val
111 30
111 50
222 10
222 30
333 10
444 0
444 10
555 60

 IDごとでValが全て20以上のIDの行を出力します。

出力結果
ID Val
111 30
111 50
555 60
修正対象のSQL
select a.ID,a.Val
from SelfRef a,
     (select ID
      from SelfRef
      group by ID
      having min(case when Val >= 20
                      then 1
                      else 0 end)=1) b
where a.ID = b.ID
order by a.ID,a.Val;

 前問でも扱いましたが、上記のSQLのようにfrom句で(インラインビュー) bと記述しているにも関わらず、select句で表別名bからのデータ表示を行っていないSQLは、書き換えることができます。上記のSQLを可読性の高い記述で同じ結果を取得できるSQLに修正して下さい。

ヒント

 大本のselect文のfrom句から、インラインビューをなくしてみます。

次のページ
最後に

この記事は参考になりましたか?

Oracle SQLアンチパターンの問題集連載記事一覧
この記事の著者

山岸 賢治(ヤマギシ ケンジ)

趣味が競技プログラミングなWebエンジニアで、OracleSQLパズルの運営者。AtCoderの最高レーティングは1204(水色)。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3231 2010/08/20 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー