質問するログイン新規登録

回答編集履歴

2

説明補足

2019/09/05 13:10

投稿

hatena19
hatena19

スコア34390

answer CHANGED
@@ -37,5 +37,6 @@
37
37
  ON a.番号 + 1 = b.番号
38
38
  WHERE b.番号 IS NULL;
39
39
  ```
40
+ データ `3,4,6,7,8` の場合でも `1` を返します。
40
41
 
41
42
  SQLServer や Access では、FROM句を省略して書くことで、DUALテーブルと同等のことができるのを利用。

1

コード追記

2019/09/05 13:10

投稿

hatena19
hatena19

スコア34390

answer CHANGED
@@ -19,4 +19,23 @@
19
19
  WHERE b.番号 IS NULL;
20
20
  ```
21
21
 
22
- たぶん後者の方が高速
22
+ たぶん後者の方が高速
23
+
24
+ 追記
25
+ ---
26
+ 連番は 1 から始まる前提で、1 がないときは 1 を返してほしい場合は、
27
+ 下記のようなSQLでどうかな?
28
+
29
+ ```sql
30
+ SELECT
31
+ Min(a.番号) + 1 AS 最小欠番
32
+ FROM
33
+ (SELECT 番号 FROM test_table
34
+ UNION ALL
35
+ SELECT 0 AS 番号) a
36
+ LEFT JOIN test_table b
37
+ ON a.番号 + 1 = b.番号
38
+ WHERE b.番号 IS NULL;
39
+ ```
40
+
41
+ SQLServer や Access では、FROM句を省略して書くことで、DUALテーブルと同等のことができるのを利用。