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 avec jointure


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 182
    Points : 66
    Points
    66
    Par défaut Requête avec jointure
    J'ai la requête suivant :
    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 * 
    from (
           select a.heure a_heure,a.code a_code,a.cd_ens a_cd_ens,a.pos a_pos,
                  b.heure b_heure,b.code b_code,b.cd_ens b_cd_ens,b.pos b_pos
           from zzzzzz a 
                left outer join
                zzzzzz b
                on a.heure=b.heure
           where a.pos=1 and b.pos=2
         ) aa
         left outer join
         zzzzzz bb
         on aa.a_heure=bb.heure
    where bb.pos=3
    Elle répond pleinement à mes attentes si j'ai des données avec les valeurs 1,2 ou 3 dans le champ POS.
    Le pb est quand par exemple, je n'ai pas d'enregistrement avec pour valeur 3 dans le champ POS, cela me retour rien alors que je souhaiterai avoir ceux correspondants à POS=1 et 2.
    Là je sèche complètement.
    Merci d'avance

    NB : Le but de cette requête est à la base de créer toutes les combinaisons possibles pour des données ayant des valeurs 1,2 et 3.
    exemple n°1 : 4 enregistrements avec POS=1, 3 avec POS=2 et 2 avec POS=3 doivent me donner 24 combinaisons.
    exemple n°1 : 4 enregistrements avec POS=1, 3 avec POS=2 et 0 avec POS=3 doivent me donner 12 combinaisons.

  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) il y a sans doute une façon plus simple d'écrire cela
    2) il me semble que des full outer join sont nécessaires
    3) il faut mettre la condition sur le POS dans la condition de jointure, par exemple, en reprenant ta requête telle qu'elle est :

    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 * 
    from ( 
           select a.heure a_heure,a.code a_code,a.cd_ens a_cd_ens,a.pos a_pos, 
                  b.heure b_heure,b.code b_code,b.cd_ens b_cd_ens,b.pos b_pos 
           from zzzzzz a 
                left outer join 
                zzzzzz b 
                on a.heure=b.heure 
           where a.pos=1 and b.pos=2 
         ) aa 
         left outer join 
         zzzzzz bb 
         on aa.a_heure=bb.heure 
        and bb.pos=3
    Mais cela te donnera aucune ligne si pos = 2, et pos = 3 existe, mais pas pos = 1

    Essaye (sans garantie)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select a.heure a_heure,a.code a_code,a.cd_ens a_cd_ens,a.pos a_pos, 
           b.heure b_heure,b.code b_code,b.cd_ens b_cd_ens,b.pos b_pos 
           c.heure c_heure,c.code c_code,c.cd_ens c_cd_ens,c.pos c_pos   
    from zzzzzz a full outer join zzzzzz b on a.heure=b.heure and a.pos=1 and b.pos=2 
                  full outer join zzzzzz c on c.heure=a.heure and c.pos=3

  3. #3
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Es tu sous Oracle ? Si c'est le cas la jointure externe peut-être faite par ce l'operateur (+) que tu peux rajouter dans la clause "WHERE" . Ce qui allègera ta syntaxe. Je pense que également que tu pourra résoudre ton problême.

  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
    Citation Envoyé par ze_key
    Es tu sous Oracle ? Si c'est le cas la jointure externe peut-être faite par ce l'operateur (+) que tu peux rajouter dans la clause "WHERE" . Ce qui allègera ta syntaxe. Je pense que également que tu pourra résoudre ton problême.
    Argh, faire cela ne permet pas de faire un full outer join, mais en tout état de cause, cela éloigne du standard SQL (et personnellement je trouve la syntaxe standard beaucoup plus lisible )

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 182
    Points : 66
    Points
    66
    Par défaut
    Merci à tous.

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

Discussions similaires

  1. Requête avec jointure externe
    Par claralavraie dans le forum Langage SQL
    Réponses: 8
    Dernier message: 02/02/2006, 09h34
  2. optimisation d'une requête avec jointure
    Par champijulie dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 07/07/2005, 10h45
  3. Requête avec jointures
    Par Corben dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/11/2004, 13h55
  4. Mise à jour de table impossible après requête avec jointure
    Par sto dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/03/2004, 14h24
  5. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 11h33

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