「数値」テーブルを使用できます (さまざまな操作に便利です)。
CREATE TABLE num
( i UNSIGNED INT NOT NULL
, PRIMARY KEY (i)
) ;
INSERT INTO num (i)
VALUES
(1), (2), ..., (1000000) ;
それで:
SELECT
num.i
FROM
num
LEFT JOIN
tableX AS t
ON num.i = t.columnX
WHERE
t.columnX IS NULL
ORDER BY
num.i
LIMIT 5
また:
SELECT
num.i
FROM
num
WHERE
NOT EXISTS
( SELECT *
FROM tableX AS t
WHERE num.i = t.columnX
)
ORDER BY
num.i
LIMIT 5
補助テーブルを使用しない別のアプローチは、MySQL 変数を使用することです。SQL-Fiddle、test-2 でテストできます。出力は前のものと同じではありません (実行できることを示すためだけです)。
SELECT start_id, end_id
FROM
( SELECT
IF( t.columnX <> @id, @id, NULL) AS start_id
, IF( t.columnX <> @id, t.columnX-1, NULL) AS end_id
, @rows := @rows + (t.columnX - @id) AS r
, @id := t.columnX + 1 AS running_id
FROM
tableX AS t
CROSS JOIN
( SELECT @rows := 0
, @id := 1
) AS dummy
WHERE
@rows < 5
ORDER BY
t.columnX
) AS tmp
WHERE
start_id IS NOT NULL