IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Sélectionner tous les entiers dans une fourchette


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 37
    Points
    37
    Par défaut Sélectionner tous les entiers dans une fourchette
    Bonjour à tous,

    En fait voilà, j'ai une table dont l'identifiant est un code alphanumérique représentant un nombre sur 3 caractères et je voudrai une requête permettant de trouver les "emplacements" libres de cette tables.

    J'étais parti dans l'idée de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select (tous les entiers)
    where entier between 0 and 999
    and entier not in (select identifiant from ma_table)
    Et pour sélectionner les entier le pensais à une requête de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL> select nombre from dual where nombre between 0 and 10;
    select nombre from dual where nombre between 0 and 10
                                  *
    ERROR à la ligne 1 :
    ORA-00904: "NOMBRE" : identificateur non valide
    Est-ce que quelqu'un pourrait me guider dans ma (re)quête s'il vous plait ?

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    1) créer une table avec les 999 lignes
    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT a.Valeur, b.Valeur
    FROM laTable a, laTable b
    WHERE NOT EXISTS (SELECT NULL FROM laTable c WHERE c.Valeur > a.Valeur AND c.Valeur < b.Valeur)
    AND a.Valeur < b.Valeur 
    AND b.Valeur != a.Valeur + 1

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    Merci...

    mais j'aurais préféré une solution sans création de table en fait...

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    La deuxième solution ne crée pas de table !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par pgibone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT a.Valeur, b.Valeur
    FROM laTable a, laTable b
    WHERE NOT EXISTS (SELECT NULL FROM laTable c WHERE c.Valeur > a.Valeur AND c.Valeur < b.Valeur)
    AND a.Valeur < b.Valeur 
    AND b.Valeur != a.Valeur + 1
    J'avais mal lu... je pensais qu'il y avait 2 étapes :
    1) tu crées la table
    2) tu fais une requête.

    Par contre, pourrais tu éclairer mes lanternes ? en fait on récupère de la table les intervalles entre lesquels les places sont inoccupées ?

    WHERE NOT EXISTS (SELECT NULL FROM laTable c WHERE c.Valeur > a.Valeur AND c.Valeur < b.Valeur) : Il n'y a pas d'elements entre le premier et le second dans la table
    a.Valeur < b.Valeur : A est la borne inférieure, B est la borne supérieure
    b.Valeur != a.Valeur + 1 Par contre, je ne vois pas pourquoi celle là ... tu exclues les intervalles de 2 elements ?

    Merci pour tes éclaircissements. Et au fait, tu l'as sortie de ton chapeau cette requête ou bien tu l'avais déjà utilisée ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    Pardon, rectification, les bornes des intervalles ne sont pas incluses dans l'intervalle d'où la dernière condition s'avère utile.

    MERCI POUR TOUT

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. afficher tous les âges dans une base ?
    Par sabredebois dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/01/2008, 09h26
  2. Réponses: 7
    Dernier message: 03/10/2007, 17h58
  3. Réponses: 3
    Dernier message: 06/09/2007, 14h31
  4. [RegEx] Trouver tous les "/mot" dans une chaîne
    Par micatmidog dans le forum Langage
    Réponses: 7
    Dernier message: 31/03/2006, 12h07
  5. [TWebBrowser] Comment trouver tous les liens dans une page ?
    Par xenos dans le forum Composants VCL
    Réponses: 1
    Dernier message: 15/01/2006, 23h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo