WHERE 1 = 1

WHERE 1 = 1について、SQL初心者だと、パッと見たときに「なんだこれは、なにかテクいことしてるけど、何しているかわからない」となりがち。何度か聞かれたことがあるのでメモとして残しておく。

端的にメリットを述べると、

「WHERE 1 = 1」と書いてしまえば、以降の条件についてはすべて AND でつないで行けるということ。

これの何が良いかというと、例えばSQLの検索条件をユーザが画面から入力した単数もしくは複数の条件をもとに動的に設定するとしたときに、これは条件が1つだからANDは不要、これは2つ条件があるから2つ目にはANDをつけよう、という余計な処理が必要なくなり、すべてANDで繋げばいいじゃん、となる。

まああと些細なメリットとして

  • インデントがそろうので見やすい
  • デバック時などにコメントアウト編集が楽

だったりする。

あとはパフォーマンスの問題だが、「WHERE 1 = 1」程度では実行計画上変化しないのでこれは問題ない。

 

ちなみにこれと同じロジックでJoin時に「ON 1 = 1 」という記述をしている人を見たことがあるがこれはいかがなものなのだろうか。直感的に結合条件に式は加えたくない(&加えるメリットがそこまで感じられない)のだが・・・