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

Oracle Discussion :

[Oracle 10g] Combinaison de RIGHT et INNER joins


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2004
    Messages : 46
    Par défaut [Oracle 10g] Combinaison de RIGHT et INNER joins
    Bonjour

    Ca a l'air d'un probleme classique, mais je ne trouve rien sur le forum...

    Dans un datawarehouse, nous avons 3 tables liées par un right join et un inner join et les resultats ne sont pas bons.

    On souhaite avoir toutes les valeurs de la dimension (MD=master data), meme si elles n'ont pas de ligne correspondante dans la table de fait (FACT) : dans ce cas le total affiché sera NULL.

    (1) Query donnant des resultats partiels : le outer join ne semble pas fonctionner car on obtient la meme chose que si l'on fait un INNER JOIN entre MD et FACT, c'est a dire seulement les dimensions avec des lignes dans FACT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     SELECT
      MD.DIMENSION,   sum(fact.TOTALEURO)    
    FROM
      T1_FACT  fact 
      RIGHT OUTER JOIN V1_MASTERDATA  MD 
              ON (MD.DIMENSION=FACT.DIMENSION)
       INNER JOIN V1_CALENDAR CAL 
            ON (FACT.IDFISCALYEAR= CAL.NOYEAR and  
                  FACT.IDFISCALMONTH=CAL.NOMONTH)
    WHERE
        CAL.NOMONTH  =  04   AND  CAL.NOYEAR  =  2011
    GROUP BY   MD.DIMENSION
    (2) Query donnant des resultats corrects (les valeurs de MD.DIMENSION sans TOTALEURO sont affichees) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT
      MD.DIMENSION,   sum(fact.TOTALEURO)    
    FROM
      (SELECT *  FROM  T1_FACT  fact ,V1_CALENDAR CAL 
       where FACT.IDFISCALYEAR= CAL.NOYEAR and    
                FACT.IDFISCALMONTH=CAL.NOMONTH AND
               CAL.NOMONTH  =  04   AND  CAL.NOYEAR  =  2011) F
      RIGHT OUTER JOIN V1_MASTERDATA  MD 
    ON (MD.DIMENSION=F.DIMENSION)
    GROUP BY  MD.DIMENSION
    Comme la query est générée par BO, on doit trouver une autre solution car one ne peut pas la réécrire telle qu'en (2), mais j'aimerais d'abord comprendre pourquoi cela ne fonctionne pas.


    A noter : V1_CALENDAR est une vue sur une table Calendar ,avec un where qui limite la liste des dates possibles
    V1_MASTERDATA est une vue sur la table MasterData, avec un where qui limite les dimensions aux valeurs "courantes"
    Je ne sais pas si cela peut avoir un impact sur la query.


    Merci d'avance si quelqu'un a une explication et pourquoi pas une idée de remplacement
    Isa

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    FACT Outer join Md => les lignes de MD et FACT plus les lignes de MD sans FACT. Conséquence: valuers nulles pour Fact.IDFISCALYEAR, etc.
    Mais lors de la jointure avec CAL ces lignes n'ont pas de correspondance dans CAL.

  3. #3
    Membre averti
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2004
    Messages : 46
    Par défaut
    Merci, je comprends le probleme.

    Peut-on dire a Oracle de faire d'abord l'INNER JOIN afin de constituer la liste de lignes sur lesquelles on pourra ensuite faire le RIGHT JOIN ?

    Ou bien la seule facon est de faire une sub-query entre FACT et CALENDAR pour avoir d'abord toutes les lignes puis utiliser un RIGHT JOIN sur cette sub-query...comme en (2) ?

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Peut être il sera intéressante pour vous de lire "Data Densification for Reporting".

    [Edit]
    Mea culpa! Modifié le lien!
    [/Edit]

  5. #5
    Membre averti
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2004
    Messages : 46
    Par défaut
    Oui la densification, c'est ce que nous cherchons a faire
    ... mais le lien ne marche pas

Discussions similaires

  1. update left join oracle 10g
    Par zekabyle dans le forum SQL
    Réponses: 5
    Dernier message: 29/05/2009, 18h40
  2. left join , right join et inner join ?
    Par amine003 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/12/2008, 17h25
  3. Réponses: 8
    Dernier message: 22/04/2008, 17h24
  4. Réponses: 7
    Dernier message: 13/12/2007, 13h32
  5. [Oracle] problème avec INNER JOIN
    Par Philofish dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/09/2005, 10h20

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