質問: 顧客CDが一番小さいもの ``` といったように。 またいくつものテーブルを結合しているクエリであり、 「顧客CDが一番小さいもの」のようなJOIN句のONの条件が他にも5つほどあるので パフォーマンスを考えたクエリにしたいと思っています。 **パフォーマンスが良く、シンプルな書き方にするにはどのような書き方にすればよいでしょうか?** もしわかる方がいればお願い致します。
回答: 結合条件内で集計関数は使えないので、やはりサブクエリを利用せざるをえないです。 1同様の条件が複数登場すること 2売上表のデータ顧客CD以外も当然利用すること 上記2点を考慮すると、 削除フラグの立っていない最小の顧客コード取得用のサブクエリをテーブル別名を付けて用意し、 そいつをベースに結合していくのが無難かと思います。 クエリ全体の見た目はパッとしませんがね。 MySQL以外のDBMSだとWITH句をサポートしてるので、 クエリ自体はもう少しすっきり書けそうな気はするのですが^^; **追記** イメージとしては以下のような感じです。 ``` SELECT * FROM 売上表 A INNER JOIN ( SELECT MIN(売上表.顧客CD) 最小顧客CD FROM 売上表 WHERE 削除フラグ = '0' ) B ON A.顧客CD = B.最小顧客CD ``` 後は上記を膨らませていく感じです。 **追記2** ソース修正しました。 寝ぼけてどえらいコード書いてました......