Bonjour,
J'ai une table qui a une colonne ID. Ces ID sont supposes etre successifs, mais il arrive qu'il y ait des trous. Est-il possible de batir une requete SQL pour avoir ces trous?
Merci.
Bonjour,
J'ai une table qui a une colonne ID. Ces ID sont supposes etre successifs, mais il arrive qu'il y ait des trous. Est-il possible de batir une requete SQL pour avoir ces trous?
Merci.
Probablement, quel est votre SGBD ?
Email : http://scr.im/waldar
Salut !
Je suppose que NexusDB ne fait pas les fonctions analytiques ?
Tu cherches ceux pour lesquels (hormis le premier), il n'existe pas de id - 1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT * FROM TaTable a WHERE NOT EXISTS (SELECT NULL FROM TaTable b WHERE a.id = b.id -1) AND a.id <> (SELECT min(id) FROM TaTable)
(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...
Le pacblog : http://pacmann.over-blog.com/
Merci beaucoup pour ta reponse. En fait, c'est pas exactement ce que je cherchais, mais ca m'a inspire et aide a trouver une solution.
Merci encore une fois.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT ID FROM MaTable a WHERE (a.ID - 1 NOT IN (SELECT ID FROM MaTable) AND a.ID <> 0) OR (a.ID + 1 NOT IN (SELECT ID FROM MaTable) AND a.ID <> (SELECT Max(ID) FROM MaTable)) ORDER BY ID
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
Et quel est le but de la recherche de ces trous ?
Si l'autre table est sur le même serveur, une jointure externe entre les deux tables permettrait de lister les trous très facilement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT a.ID FROM autretable AS a LEFT JOIN tableaAtrous AS t ON a.ID = t.ID WHERE t.ID IS NULL
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
Me requete finale donnerait ceci:
Sur une table de 12000 enregistrements, ca prend environ 2 secondes. Y a un moyen d'optimiser cette requete?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT * FROM (SELECT TOP 50000 ID FROM MaTable a WHERE (a.ID - 1 NOT IN (SELECT TOP 50000 ID FROM MaTable)) UNION All SELECT TOP 50000 ID FROM MaTable a WHERE (a.ID + 1 NOT IN (SELECT TOP 50000 ID FROM MaTable) AND a.ID <> (SELECT TOP 50000 Max(ID) FROM MaTable))) ORDER BY ID
Merci.
PS: Sur cette requete, j'ai automatiquement le premier enregistrement, c'est fait expres parce que ca m'aide dans la suite de mon traitement.
Hmmm, deux secondes, c'est pas vraiment la mort
Tu as le plan d'exécution ?
Petite remarque au passage :
Tu ne devrais pas plutôt utiliser UNION sans le ALL ? (genre quand t'as un id isolé "par le haut et par le bas", il va ressortir deux fois)
(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...
Le pacblog : http://pacmann.over-blog.com/
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager