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 :

[Oracle9i] problème left outer join


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Par défaut [Oracle9i] problème left outer join
    Bonjour, voici mon problème:
    j'ai 3 tables, A B C
    et je souhaite garder tous les enregistrement de la table A
    je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select A.name, count(B.idA) as "nb"
    from A 
           left outer join B on A.id = B.idA 
           left outer join C on B.id = C.idB
    where B.machin= " "
     
    group by A.name
    le resultat donne:

    asterix nb
    bidon1 10
    bidon3 9

    alors qu'il devrait être:
    asterix nb
    bidon1 10
    bidon2 0
    bidon3 9

    je vous remercie d'avance.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Essayez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Select
        A.name,
        count(B.idA) as nb
    from
        A 
        left outer join B
          on A.id = B.idA 
         and B.machin= ' '
        left outer join C
          on B.id = C.idB
    group by
        A.name

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Essayez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Select
        A.name,
        count(B.idA) as nb
    from
        A 
        left outer join B
          on A.id = B.idA 
         and B.machin= ' '
        left outer join C
          on B.id = C.idB
    group by
        A.name
    :s en fait, j'ai déjà essayé cela, mais la partie "and B.machin= ' ' " n'a pas été évoluée. j'ai essayé également avec (+), ca marche avec 2 tables, mais si je veux faire le jointure avec une troisième table, erreur oracle "....outer join..at most one other table"

    Je suis toujours à la recherche d'une solution.....

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il n'y a pas de raison, si votre prédicat B.machin n'a pas été evalué c'est qu'il a été mal écrit, où qu'il y a une gestion de nulls à faire peut-être, difficile à dire avec ce niveau d'information.

    Est-il possible d'en savoir plus sur la requête, et/ou d'avoir un jeu de données qui pose problème ?

    Vous avez raison d'abandonner les (+), il y a de meilleures possibilités avec les outer joins et en plus c'est la norme.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Analyst
    Inscrit en
    Juillet 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 150
    Par défaut
    Bonjour,
    Comme indiqué par Waldar, il serait bien d'avoir un jeu de test.
    Pour ma part, en oracle 10XE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    create table A (
    id int NOT NULL,
    name char(10)
    );
     
    create table B (
    idB int NOT NULL,
    idA int NOT NULL,
    nameB char(10)
    );
     
    create table C (
    idC int NOT NULL,
    idB int NOT NULL,
    nameC char(10)
    );
     
    insert into A VALUES(1 ,'bidon1');
    insert into A VALUES(2 ,'bidon2');
    insert into A VALUES(3 ,'bidon3');
    insert into A VALUES(4 ,'bidon4');
     
    insert into B VALUES(100,1,'1-100');
    insert into B VALUES(101,1,'1-101');
     
    insert into B VALUES(130,3,'3-130');
    insert into B VALUES(131,3,'3-131');
    insert into B VALUES(132,3,'3-132');
     
    insert into B VALUES(444,4,'4-444');
     
    insert into C VALUES(1000,100,'1-100-1000');
    insert into C VALUES(1001,100,'1-100-1001');
     
    insert into C VALUES(1002,101,'1-101-1002');
    La requete de Waldar fonctionne bien (Avec les adaptations à la bdd que j'ai créée):

    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
        A.name,
        count(B.idA) AS nb
    FROM
        A 
        LEFT OUTER JOIN B
          ON A.id = B.idA 
    and B.nameB like '%0%' 
    
        LEFT OUTER JOIN C
          ON B.idB = C.idB
    
    
    GROUP BY A.name

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Par défaut
    Tout d'abord, je vous remercie beaucoup de m'avoir répondue.
    Je vais préciser un peu plus en espérant que cela aide à la recherche d'une solution...
    j'ai 5 tables:
    state, epi, ep_def, dom, prj
    (state est la table A)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select state.name as "state",count(epi.STATE_DEF_ID) as "nb instance echanges"
    from state 
    left outer join epi on state.id = epi.STATE_DEF_ID and epi.START_TIME<='31/05/2009 23:59:59' and
         epi.START_TIME>='01/05/2009 00:00:00' 
    left outer join ep_def on ep_def.ID = epi.EP_DEF_ID
    left outer join dom on dom.ID = ep_def.DOMAIN_ID
    left outer join prj on prj.ID = dom.PROJECT_DEF_ID
    where prj.NAME = 'NOTATION' or epi.STATE_DEF_ID is null 
     
    group by state.NAME

    le resultat:
    state nb instance echanges
    Abandon (manuel) 0
    KO 9
    OK 21
    OK (manuel) 0
    On voit bien les "0", mais il n'y en a pas tout... en fait, il existe 5 enregistrements dans la table "state": Abandon (manuel), KO, OK, OK (manuel) et Pending. C'est assez bizarre qu'il m'a pas affiché 5 lignes...mais 4. j'ai dû faire une erreur dans les jointures.

    je vous remercie d'avance.

Discussions similaires

  1. Problème Left outer join et Ria (ou Edmx?)
    Par Golzinne dans le forum Silverlight
    Réponses: 2
    Dernier message: 06/09/2011, 14h35
  2. Problème left outer join et group by
    Par maya13400 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/09/2010, 20h40
  3. probléme left outer join
    Par biba158 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 17/07/2007, 12h29
  4. Problème avec left outer join
    Par jgfa9 dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/08/2005, 21h07
  5. Problème de performance avec LEFT OUTER JOIN
    Par jgfa9 dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/07/2005, 13h17

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