RECHERCHE DU PREMIER IDENTIFIANT MANQUANT (TROU) D'UNE TABLE
Mindiell
Messages postés558Date d'inscriptionjeudi 25 juillet 2002StatutMembreDernière intervention 5 septembre 2007
-
6 mai 2005 à 13:03
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDerniè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.
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 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és1Date d'inscriptionvendredi 9 mars 2012StatutMembreDerniè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és558Date d'inscriptionjeudi 25 juillet 2002StatutMembreDernière intervention 5 septembre 20071 9 mai 2005 à 18:30
et mea culpa donc, c'était plus ironique que moqueur...
:pardon: :pardon: :pardon:
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 avril 2009 9 mai 2005 à 17:29
Exact, il s'agit de s'entre aider pas de se moquer.
Mindiell
Messages postés558Date d'inscriptionjeudi 25 juillet 2002StatutMembreDernière intervention 5 septembre 20071 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és196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 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és558Date d'inscriptionjeudi 25 juillet 2002StatutMembreDernière intervention 5 septembre 20071 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
22 oct. 2012 à 11:18
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]
9 mars 2012 à 10:04
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?
9 mai 2005 à 18:30
:pardon: :pardon: :pardon:
9 mai 2005 à 17:29
9 mai 2005 à 17:22
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 ? ^^
9 mai 2005 à 16:59
6 mai 2005 à 13:03
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