Daily Archives: 2010 年 11 月 29 日

SQLで○○以外(<>)の時のNULLには気をつけろ!

2
Filed under MySQL, SQL, 未分類

今日実際にこんな現象を見たので、メモ的に残しておきます。
SQLで何かするときに、以下のようなパターンがあると思う。

| id | val1 |
| 1 | 5 |
| 2 | 10 |
| 3 | 1 |
| 4 | 100 |
| 5 | NULL |
| 6 | 20 |

この場合に、NULLをひっぱったりするときに IS を利用するのは知ってました。

SELECT id, val1 FROM test WHERE val1 is NULL;

ここで今回のメモは、

SELECT id, val1 FROM test WHERE val1 <> 100;

このようにした場合に、NULLはHITしないということです。
型が違うためかどうかわかりませんが、そういうことです。
対策としては、NULLについても別途条件を追加することです。

SELECT id, val1 FROM test WHERE (val1 is NULL or val1 <> 100);

これで、あなたにも明るい未来が見えることでしょう。