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.
![]()
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)
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
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
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)
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