LoginSignup
0
0

More than 1 year has passed since last update.

SQLでWHERE NOT INする時はカラム値がNULLの場合の考慮抜けに注意

Posted at

MariaDB

NULLの場合も検索結果に上がってほしい場合は、COALESCE()かます必要あり。

test_valがNULLのレコードも検索結果に上がる
SELECT * FROM tester 
WHERE COALESCE(test_val, '') NOT IN ('1','2')
こう書くとtest_valがNULLのレコードは検索結果に上がってこない
SELECT * FROM tester 
WHERE test_val NOT IN ('1','2')

test_valがNULLのレコードは値が『1』でも『2』でもないから検索結果に上がってくるだろう
と思ってるとダメ。

Access

MariaDBと同様。
NULL置換関数をかませるかどうかで結果が変わる。

test_valがNULLのレコードも検索結果に上がる
SELECT * FROM tester 
WHERE Nz(test_val, '') NOT IN ('1','2')
こう書くとtest_valがNULLのレコードは検索結果に上がってこない
SELECT * FROM tester
WHERE test_val NOT IN ('1','2')

バージョン

Windows 10 Pro 21H2 OSビルド 19044.1889
Microsoft Access for Microsoft 365 MSO (バージョン 2207 ビルド 16.0.15427.20166) 32 ビット
10.5.4-MariaDB

TODO:Oracleの場合もMariaDBとか同じ挙動。だけどCOALESCE(カラム名,'')の戻り値がNULLになっちゃうので、そのへんを調べた上で結果まとめる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0