集合で考える ―― HAVING句の力:その2

http://www.geocities.jp/mickindex/database/celko/celko_tia.html目から鱗SQL

    • 歯抜けの最小値を探す

SELECT MIN(seq_nbr + 1)
 FROM Foobar
WHERE (seq_nbr + 1) NOT IN (SELECT seq_nbr FROM Foobar);



ところで余談ですが、この Foobar テーブルに「連番」列が NULL の行が存在した場合、

このクエリの結果はとんでもないことになります。
最初わかんなかったけど、

WHERE (seq_nbr + 1) NOT IN (SELECT seq_nbr FROM Foobar)
 ↓
WHERE (
(seq_nbr + 1) <> 1
and (seq_nbr + 1) <> 2
and (seq_nbr + 1) <> 4
 :
and (seq_nbr + 1) <> NULL
)ということかな?

WHERE NOT (
(seq_nbr + 1) = 1
or (seq_nbr + 1) = 2
or (seq_nbr + 1) = 4
 :
or (seq_nbr + 1) = NULL
)
なら、問題ない気がする。(TRUE or NULL → TRUEだから)

というか、この練習問題やって気づいたけど3値理論だと、ド・モルガンの法則が通じなくなるのか。
3値理論、怖すぎる。