MySQLでサブクエリーの代わりにON句の結合条件を使用する。

ECサイトの管理画面で、受注データ一覧を様々な条件で絞り込み検索する機能を実装した。
できたけど、テーブル自己結合とサブクエリーの連発で処理がめちゃくちゃ重い。
調べてみたら、ON句に複数の条件を設定することでサブクエリー化せずに同じコトができると分かったので、メモしておく。

前提知識として、SELECT文の処理順序を知っておく必要がある。

1.FROM
2.ON
3.JOIN
4.WHERE
5.GROUP BY
6.HAVING
7.SELECT
8.DISTINCT
9.ORDER BY
10TOP(LIMIT)

https://qiita.com/suzukito/items/edcd00e680186f2930a8

今回の話に関係があるのは2.~4.です。

結合条件
ON句に書く条件。JOIN句の前に処理される。
つまり、ON句に書かれた条件に合うレコードがJOINの対象になる。
通常はテーブル同士の結合条件が書かれるが、ANDやORを続けて書くことで、片方のテーブルの結合対象レコードを限定できる。

SELECT テーブルA.ID, テーブルB.商品名
FROM テーブルA
INNER JOIN テーブルB
ON テーブルA.ID = テーブルB.id
AND テーブルB.商品名 = 'りんご';


コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です