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
)ということかな?
なら、問題ない気がする。(TRUE or NULL → TRUEだから)
WHERE NOT (
(seq_nbr + 1) = 1
or (seq_nbr + 1) = 2
or (seq_nbr + 1) = 4
:
or (seq_nbr + 1) = NULL
)
というか、この練習問題やって気づいたけど3値理論だと、ド・モルガンの法則が通じなくなるのか。
3値理論、怖すぎる。