Requête pour sélectionner le premier numéro libre

cs_spectro2 Messages postés 5 Date d'inscription lundi 12 janvier 2004 Statut Membre Dernière intervention 5 février 2013 - 7 janv. 2011 à 10:38
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 9 janv. 2011 à 11:21
Salut à tous !

Voici mon problème j'aimerai récupérer le premier numéro libre dans une table.

Voici le contenu de ma MaTable :

MonNumero MaColonne2
1 toto1
2 toto2
3 toto3
5 toto5
6 toto6
7 toto7
8 toto8
10 toto10


Voici ma requête :

SELECT CASE
WHEN (SELECT MonNumero FROM MaTable WHERE MonNumero=1)=1
THEN MonNumero +1
ELSE 1
END
FROM MaTable
WHERE MonNumero +1 NOT IN
(SELECT MonNumero FROM MaTable)
ORDER BY MonNumero FETCH FIRST ROW ONLY

Je m'attends à ce que la requête me retourne 4.

Je pense qu'il y a une solution déjà connue et plus performante, pourtant ça fait un moment que je cherche sur le net et j'ai rien trouvé ...

Merci les copains !!

2 réponses

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
7 janv. 2011 à 11:28
Bonjour

essayez ceci :
SELECT M1.MonNumero + 1
FROM MaTable M1
LEFT OUTER JOIN MaTable M2
    ON M1.MonNumero = M2.MonNumero + 1
WHERE M2.MonNumero IS NULL
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
9 janv. 2011 à 11:21
Bonjour

Aieeeuuuuu, l'idée est bonne, mais l'implementation l'est moins

Spectro, essaie plutôt ça:

SELECT MIN(M1.MonNumero + 1) AS Expr1
FROM matable M1 LEFT OUTER JOIN matable M2 ON M1.MonNumero + 1 = M2.MonNumero
WHERE     (M2.MonNumero IS NULL)


Bob.
C# is amazing, enjoy it!
0
Rejoignez-nous