NOT INのサブクエリにNULLが含まれる場合の回避方法前提 # SELECT * FROM t1;
t1_id | t2_id
-------+-------
1 | 100
2 | 100
3 | 200
4 | 300
(4 行)
# SELECT * FROM t2;
t2_id
-------
100
200
400
(4 行)
t2にNULLなレコードがある。 NOT IN# SELECT * FROM t1 WHERE t2_id NOT IN ( SELECT t2_id FROM t2 ); t1_id | t2_id -------+------- (0 行) NULLが他の値(300)より優先されるため、期待した結果にならない。 回避方法:NOT EXISTS # SELECT * FROM t1 WHERE NOT EXISTS ( SELECT t2.t2_id FROM t2 WHERE t1.t2_id = t2.t2_id );
t1_id | t2_id
-------+-------
4 | 300
(1 行)
|
|