やりたいこと

MySQLのSELECT文で、JOIN部分(LEFT OUTER JOIN)に条件を記述した場合とWHERE句に条件を記述した場合の結果の違いを知りたい。

データ

tbl_order(受注テーブル)
tbl_order(受注テーブル)
tbl_user(顧客テーブル)
tbl_user(顧客テーブル)

受注テーブルと顧客テーブルがあり、受注テーブルの受注顧客IDをキーに「LEFT OUTER JOIN」で顧客テーブルをくっつける。
その際、JOIN内に「受注削除フラグ = 0」を指定した場合と、WHERE句で「受注削除フラグ = 0」を指定した場合の結果の違いを知りたい。

結果

order_del_flg = 0

order_del_flg = 0
order_del_flg = 0

user_del_flg = 0

user_del_flg = 0
user_del_flg = 0

order_del_flg = 0 AND user_del_flg = 0

order_del_flg, user_del_flg = 0
order_del_flg, user_del_flg = 0

そもそも

ごくごくフツーのアプリケーションなら「両方ともWHEREに」の結果が必要なハズだし、取得件数も少なく済むので幸せ。
Butしかし、
細かい中身は違うが、処理的には"結果セットをループ処理することが仕様っぽい状況で、「両方ともJOINに」のSQLを発行している"的な実装を見かけた。しかもレコードは数十万件単位。
とてもモヤモヤしたのでこの記事を書こうと思った。
INNER JOINならJOINの部分に条件書いてもいいような。

SELECT文でJOIN部分とWHERE句に条件を書いた場合の違い
このエントリーを Google ブックマーク に追加
LinkedIn にシェア
[`evernote` not found]
Pocket


Post navigation