Выполните самостоятельное соединение, чтобы найти последовательные номера, и там, где нет совпадений, у вас есть пропущенный номер.
SELECT t1.i-1 AS missing_i
FROM thetable t1 LEFT OUTER JOIN thetable t2 ON t1.i-1 = t2.i
WHERE t2.i IS NULL
Но это не находит все пропущенные числа, только те, которые на единицу меньше числа, которое присутствует. Если все ваши пробелы только одно число, это нормально. Но если у вас есть пробелы, которые представляют собой последовательности из двух или более чисел, вам, возможно, придется использовать альтернативную технику:
Создайте таблицу и заполните ее целыми числами от 1 до 270:
CREATE TABLE n (i INT AUTO_INCREMENT PRIMARY KEY, dummy INT);
INSERT INTO n (dummy) VALUES (0); -- now you have 1 row
INSERT INTO n (dummy) SELECT dummy FROM n; -- now you have 2 rows
INSERT INTO n (dummy) SELECT dummy FROM n; -- now you have 4 rows
INSERT INTO n (dummy) SELECT dummy FROM n; -- now you have 8 rows
INSERT INTO n (dummy) SELECT dummy FROM n; -- now you have 16 rows
INSERT INTO n (dummy) SELECT dummy FROM n; -- now you have 32 rows
INSERT INTO n (dummy) SELECT dummy FROM n; -- now you have 64 rows
INSERT INTO n (dummy) SELECT dummy FROM n; -- now you have 128 rows
INSERT INTO n (dummy) SELECT dummy FROM n; -- now you have 256 rows
INSERT INTO n (dummy) SELECT dummy FROM n; -- now you have 512 rows
Теперь вы можете выполнить внешнее объединение для поиска тех целых чисел, которые отсутствуют в исходной таблице:
SELECT n.i AS missing_i
FROM n LEFT OUTER JOIN thetable t ON n.i = t.i
WHERE n.i <= 270 AND t.i IS NULL