Подобно ответ LukeH, но это то, что вы просили:
SELECT MIN(a.your_column) - 1 AS answer
FROM your_table AS a
LEFT JOIN your_table AS a2
ON a2.your_column = a.your_column - 1
LEFT JOIN tableB AS b
ON a.your_column = b.column1
WHERE a.your_column < 1000
AND b.column1 IS NULL
AND a2.your_column IS NULL
Edit:
UNION
SELECT MIN(a.your_column) + 1 AS answer
FROM your_table AS a
LEFT JOIN your_table AS a2
ON a2.your_column = a.your_column + 1
LEFT JOIN tableB AS b
ON a.your_column = b.column1
WHERE a.your_column < 1000
AND b.column1 IS NULL
AND a2.your_column IS NULL
И выбрать Minumum из двух значений.
По-прежнему необходимо проверить, доступно ли значение 1, но если у вас есть промежуток между A и B, он должен найти A + 1 и B-1, и вы можете выбрать самый маленький. Очевидно, A + 1 является самым маленьким, так что вы можете просто использовать вторую часть ...
Он работает немного! Это решение получит только неиспользуемое значение, которое на одно значение меньше используемого значения. Поэтому, если значение min в базе данных равно 100, ваш запрос возвращает 99. он должен вернуться 1. Есть ли способ сделать его лучше? – Bob