similaires à la réponse de LukeH, mais il fait ce que vous avez demandé:
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
et choisissez minumum des deux valeurs.
Il faut encore vérifier si la valeur 1 est disponible, mais si vous avez un écart entre A et B, vous devriez trouver A + 1 et B-1 maintenant et vous pourriez choisir le plus petit. Il est évident que A + 1 est le plus petit de sorte que vous pouvez simplement utiliser la deuxième partie ...
Il fonctionne un peu! Cette solution obtiendra seulement une valeur non utilisée qui est une valeur moins qu'une valeur utilisée. Donc, si la valeur min dans la base de données est 100, votre requête renvoie 99 .. elle devrait renvoyer 1. Y at-il un moyen de l'améliorer? – Bob