RECHERCHE DU PREMIER IDENTIFIANT MANQUANT (TROU) D'UNE TABLE

Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 - 6 mai 2005 à 13:03
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 22 oct. 2012 à 11:18
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31232-recherche-du-premier-identifiant-manquant-trou-d-une-table

sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
22 oct. 2012 à 11:18
Bonjour,

Ci dessous une petite requête avec autojointure pour trouver les éléments manquants dans la suite d'id :

Select d1.DEBUT, d1.FIN
From (
Select (e1.id_pat + 1) as DEBUT,
(select (min(id_pat) - 1)
From patient as f1
Where f1.id_pat > e1.id_pat) as FIN
From patient as e1
Left Outer Join patient as e2 On e1.id_pat = e2.id_pat - 1
Where e2.id_pat is null
) d1
Where d1.FIN is not null

Et si on veut restreindre sur un intervalle :
And d1.DEBUT >= [Début id contrôle]
And d2.DEBUT < [Fin id contrôle]
cs_julius54 Messages postés 1 Date d'inscription vendredi 9 mars 2012 Statut Membre Dernière intervention 9 mars 2012
9 mars 2012 à 10:04
Bonjour,

Je viens d'utiliser le code de Mindiell pour identifier les trou d'ID d'une de mes tables. Le hic est que ce code ne me renvoie pas tous les codes non utilisés mais uniquement "les trous de 1". Si en effet j'ai un trou de 50 ID, ce code ne me les retourna pas! Une idée pour palier à ce problème?
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
9 mai 2005 à 18:30
et mea culpa donc, c'était plus ironique que moqueur...

:pardon: :pardon: :pardon:
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
9 mai 2005 à 17:29
Exact, il s'agit de s'entre aider pas de se moquer.
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
9 mai 2005 à 17:22
Désolé, le ton se voulait ironique et non gincant...
Cependant, on est quand même là pour apprendre et donc jouer un peu les singes savants...

Je suis là pour apprendre des autres, et apprendre aux autres...
La source postée est intéressante, mais pas réfléchie à fond je trouve. c'est une critique que j'éspère constructive étant donné que je donne une meilleure solution, non ? ^^
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
9 mai 2005 à 16:59
SVP, un peu de modération... on n'est pas au zoo pour jouer les singes savants !
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
6 mai 2005 à 13:03
Je suis dur aujourd'hui, mais je trouve que vous faites trop compliqué !!! :o)
Je t'ai mis 3, ta source est intéressante, mais c'est beaucoup plus rapide ainsi :

SELECT (id_pat-1) FROM patient
WHERE (id_pat-1)
NOT IN (
SELECT id_pat
FROM patient
)
AND (id_pat-1)>0

Aller ! Réfléchissez un peu ;oP
Rejoignez-nous