SQLでのnull比較
カラムに null が入っている場合の比較は面倒なもの。
このような長ったらしいクエリになる。
col1 = val1 OR (col1 IS NULL AND val1 IS NULL)
比較データが 非null か null かによって、プログラムで生成するクエリを変えるという方法もある。
発行されるSQLは見やすいものになるが、代わりにプログラムのコードが長ったらしくなる。
- 非nullの場合
col1 = val1
- null の場合
col1 IS NULL
SQL99 にはこれを楽にする、IS DISTINCT FROM
という式が追加されている。
PostgreSQL はこれに対応している。
col1 IS DISTINCT FROM val1
MySQLは5.6でもこの式には対応していないが、専用の演算子がある。
col1 <=> val1
DBMS間の互換を優先するなら長ったらしく書くべきだけど、
細かいことを気にしないのなら、IS DISTINCT FROM
もしくは <=>
演算子は使っていった方が見やすい。
私は次から使うことにする。