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 : 45
    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 ?
    Entre Ce que je pense, Ce que je veux dire, Ce que je crois dire, Ce que je dis, Ce que vous avez envie d'entendre, Ce que vous entendez, Ce que vous comprenez... il y a dix possibilités qu'on ait des difficultés à communiquer. Mais essayons quand même...
    Bernard Werber

  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
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 45
    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...
    Entre Ce que je pense, Ce que je veux dire, Ce que je crois dire, Ce que je dis, Ce que vous avez envie d'entendre, Ce que vous entendez, Ce que vous comprenez... il y a dix possibilités qu'on ait des difficultés à communiquer. Mais essayons quand même...
    Bernard Werber

  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 !
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 45
    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 ?
    Entre Ce que je pense, Ce que je veux dire, Ce que je crois dire, Ce que je dis, Ce que vous avez envie d'entendre, Ce que vous entendez, Ce que vous comprenez... il y a dix possibilités qu'on ait des difficultés à communiquer. Mais essayons quand même...
    Bernard Werber

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 45
    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
    Entre Ce que je pense, Ce que je veux dire, Ce que je crois dire, Ce que je dis, Ce que vous avez envie d'entendre, Ce que vous entendez, Ce que vous comprenez... il y a dix possibilités qu'on ait des difficultés à communiquer. Mais essayons quand même...
    Bernard Werber

+ 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