読者です 読者をやめる 読者になる 読者になる

脳みそスワップアウト

揮発性なもので。おもにPHPのこととか。

SQLでのnull比較

sql mysql postgresql

カラムに 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 もしくは <=> 演算子は使っていった方が見やすい。

私は次から使うことにする。