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 :

Requete pour retrouver des intersections de valeurs dans une même table


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Points : 119
    Points
    119
    Par défaut Requete pour retrouver des intersections de valeurs dans une même table
    Bonjour,

    j'ai un problème assez simple, je pense, mais la solution ne me parait pas évidente :

    J'ai une table "Familles" contenant 3 colonnes : nom, min, max.

    Cette table sert à créer des plages de valeurs exclusives. Une famille d'un certain nom "réserve" une plage de valeurs entre min et max.

    J'aimerai m'assurer qu'une famille n'empiete pas sur la plage de valeurs d'une autre. Aussi, j'essaie de trouver une requête qui permet de renvoyer le nom des familles qui se croisent...

    Par exemple:
    Nom Min Max
    F1 0 99
    F2 100 199
    F3 150 200

    Dans ce cas, F2 et F3 se croisent.

    Voyez-vous une solution pour récupérer les noms F2 et F3 parce qu'ils s'intersectent ?

    Merci d'avance pour toute aide.
    bonne journée

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 117
    Points : 28 496
    Points
    28 496
    Par défaut
    avec OVERLAPS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select  f1.nom
        ,   f1.min
        ,   f1.max 
        ,   f2.nom
        ,   f2.min
        ,   f2.max
    from    familles    as f1
        inner join
            familles    as f2
            on  f1.nom > f2.nom
            and (f1.min, f1.max) overlaps (f2.min, f2.max)
    ;

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Points : 119
    Points
    119
    Par défaut Merci ! Autre petite question...
    La fonction OVERLAPS() de Postgresql n'acceptant que des types date, j'ai utilisé cette requête un peu moins jolie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT  f1.nom
        ,   f1.min
        ,   f1.max 
    FROM    familles    AS f1
        INNER JOIN
            familles    AS f2
            ON f1.nom != f2.nom
            AND 
            (
            ( f1.min>=f2.min AND f1.min<=f2.max )
            OR
            ( f1.max>=f2.min AND f1.max<=f2.max )
            )
    ;
    Autre question :
    est-il envisageable de créer un contrôle (règle ou check) qui interdit la création d'une famille qui en intersecte une existante ? Ceci sans avoir à créer de procédure...

Discussions similaires

  1. Réponses: 9
    Dernier message: 29/11/2012, 12h26
  2. Réponses: 4
    Dernier message: 18/12/2009, 14h44
  3. Modifier une valeur dans une autre table en VBA
    Par baila dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/12/2007, 20h45
  4. Selection d'une valeur dans une autre table
    Par beurnoir dans le forum Access
    Réponses: 1
    Dernier message: 13/10/2005, 13h02

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