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 :

Requête descendante et ascendante


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Requête descendante et ascendante
    Bonjour,

    Voici mon problème. Je dois trouver sur un schéma constitué de 10 tables en cascades, représentant des groupes reliés par 3 enchaînements de n vers n, le lignes d'une extrémité du schéma, rattachées à une ligne A de l'autre extrémité du schéma et dont toutes les lignes de la table intermédiaires sont bien reliées aussi à la ligne A...

    Difficile a expliquer, et j'ai donc pour moi-même extrêment simplifié le modèle, en me basant sur une seule table : P/R/S

    P R S
    ---- ---- ----
    1 1 1
    1 2 2
    2 3 1
    2 4 1

    En français...
    Je veux connaître les P dont tous les R sont rattachés à un même S donné que j'ai aussi essayé de traduire en
    les P dont le nombre total de R est égal au nombre de R de ce même P rattaché à S...

    Je n'arrive pas à écrire en SQL la requête qui me permette de sortir le résultat pour S vaut 1, alors
    P
    --
    2

    pour S vaut 2, alors
    P
    --
    null

    J'ai passé plus de 12 heures sur ce problème qui doit être extrêmement simple pour des bon utilisateurs de SQL.
    J'ai essayé avec des VIEW, des WITH, des sous-requêtes, mais je n'ai pas un niveau suffisant pour parvenir à construire le bon outil. Je n'ai su que décomposer...

    Merci de votre aide.
    Eric

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,


    si on rajoute cette ligne là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    P    R     S
    --------------
    1    2     1
    et si on prend S = 1, qu'en est-il du résultat ?



    edit : j'ai ça mais y a peut être moyen de faire plus simple / performant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    with tmp as (
    select 1 as p, 1 as r, 1 as s from dual union all
    select 1, 2, 2 from dual union all
    select 2, 3, 1 from dual union all
    select 2, 4, 1 from dual )
     
    select p
    from tmp a
    where s = 1
    group by p
    having count(distinct r) = (select count(distinct r) from tmp b where b.p = a.p)

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour Punkoff,

    En ajoutant la ligne que vous citez, si S vaut 1 alors la réponse est effectivement :
    p
    --
    1
    2

    Si S vaut 2
    P
    --
    null

    Je vais regarder la requête plus en détail,
    Merci pour votre aide.
    Eric

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    oki,

    La requete proposée fonctionne dans ce sense là.

    Sinon votre problème me fait pensé a ceci (c'est un peu pointu) : http://sqlpro.developpez.com/cours/divrelationnelle/

Discussions similaires

  1. Réponses: 19
    Dernier message: 06/01/2016, 12h15
  2. Réponses: 15
    Dernier message: 19/06/2015, 18h28
  3. Requète de comparaison descendante
    Par Maerynn dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/05/2012, 15h56
  4. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  5. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26

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