LoginSignup
0
0

More than 1 year has passed since last update.

SQL: <> の罠

Posted at

先日SQLを書いていたところ、どうにも SELECTがうまくできていないようだったので、色々調べていたところ、 <> を誤って理解していたことに気づいた。

TLDL;

勘違いしていたこと

例)

SELECT * 
FROM user
WHERE company_id <> 100
AND is_admin = 1

ここで、company_idがnullも許可している。
想定ではcompany_idが100ではない admin ユーザを取得したい

company_idがnullではない場合

30 <> 100 が評価されるので、 is_admin=1 のuserが全て取得できる

company_idがnullの場合

通常のプログラミングと同様に null != 100 とはならず、company_idがnullの場合はそのuserを取得できない。Not equalの演算は nullではない値 に対して評価が行われる。

解決策

SELECT * 
FROM user
WHERE (company_id IS NULL OR company_id <> 100)
AND is_admin = 1

company_idがnullだったら取得するし、nullではなければ 100ではないかチェックする。
これで想定通りのselectができた。

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