ablog

不器用で落着きのない技術者のメモ

欠番を見つけるSQL

テーブル作って、

SQL> create table users (id number(4));

欠番になるよう insert して、

SQL> insert into users (id) values (1);
SQL> insert into users (id) values (2);
SQL> insert into users (id) values (4);
SQL> insert into users (id) values (6);
SQL> insert into users (id) values (10);
SQL> insert into users (id) values (15);
SQL> commit;

欠番になってることを確認して、

SQL> select * from users;

        ID
----------
         1
         2
         4
         6
        10
        15

6 rows selected.

欠番を見つけてみる。

SQL> select id+1 id from users  u1
where not exists ( select * from users u2 where u1.id+1 = u2.id);

        ID
----------
         3
         5
         7
        11
        16

できたけどこれじゃ連続する欠番が表示されないので、ちょっと工夫してうりゃっとやると、

SQL> select * from (select level id from dual connect by level <= 20) x
where not exists (select * from users u where x.id = u.id);

        ID
----------
         3
         5
         7
         8
         9
        11
        12
        13
        14
        16
        17
        18
        19
        20

14 rows selected.

でけた!


[関連]
連続する数値を作成するSQL - ablog