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 :

FULL OUTER et clause WHERE


Sujet :

Langage SQL

  1. #1
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 484
    Points : 870
    Points
    870
    Par défaut FULL OUTER et clause WHERE
    Bonjour à tous,

    J'ai un problème bizarre que je n'arrive pas à résoudre avec pgsql, et je ne sais pas trop quoi chercher sur Google...

    J'ai la requête ci-dessous :
    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
    SELECT 
    D12.*,
    D01_Agg.*
    FROM "D12" AS D12
    FULL JOIN 
     
    (SELECT 
    "PERIOD",
    "SEG",
    "COMPANY",
    "FB",
    "ACC",
    SUM("AMOUNT") AS "SOMME"
    FROM "D01"
    GROUP BY 1,2,3,4,5)
    AS D01_Agg
     
    ON D12."PERIOD"=D01_Agg."PERIOD"
    AND D12."SEG"=D01_Agg."SEG"
    AND D12."COMPANY"=D01_Agg."COMPANY"
    AND D12."FB"=D01_Agg."FB"
    AND D12."ACC"=D01_Agg."ACC"
     
    WHERE D12."ACC"='6414600000'
    AND D12."FB"='1200'
    AND D12."PERIOD"=201410
    AND D12."SEG" NOT IN (400,999)
    Elle fonctionne, mais ne me renvoie que les lignes pour lesquelles la jointure est satisfaite, et exclut les autres.
    Si j'écris dans la condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WHERE D01_Agg."ACC"='6414600000'
    AND D01_Agg."FB"='1200'
    AND D01_Agg."PERIOD"=201410
    AND D01_Agg."SEG" NOT IN (400,999)
    là, les lignes de ma table de droite ne satisfaisant pas les critères de la jointures sont présentes...

    C'est normal ou alors je lui donne un truc mauvais à manger?

    D'avance merci,
    laloune
    Consultant B.I.
    Spécialité(s): Excel, SQL, Business Intelligence (Jedox Palo, Talend)

    "A problem worthy of attack proves its worth by fighting back." Piet Hein

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 778
    Points
    30 778
    Par défaut
    C'est un comportement normal.
    Lorsque tu écris WHERE D12."ACC"='6414600000', tu demandes que la requête ne retourne pas les lignes pour lesquelles D12."ACC" est NULL et réciproquement avec WHERE D01_Agg."ACC"='6414600000'.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Explication du phénomène de la condition de restriction avec une jointure externe sur mon blog.

    Dans votre cas, le WHERE empêche la jointure externe de D01_AGG vers D12 de fonctionner correctement. Il vous faut faire l'union de deux jointures externes, toutes deux avec la condition de restriction déportée dans la condition de jointure.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 739
    Points : 52 451
    Points
    52 451
    Billets dans le blog
    5
    Par défaut
    ATTENTION... le FULL OUTER JOIN de PostGreSQL est bugué !

    A me lire :
    http://blog.developpez.com/sqlpro/p1...-de-postgresql

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. WHERE =* et FULL OUTER JOIN
    Par telynette dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 25/01/2008, 19h44
  2. Remplacer FULL OUTER JOIN
    Par funrighd dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/07/2004, 11h54
  3. Problème clause WHERE
    Par nesbla dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/06/2004, 16h07
  4. probleme avec le caractere 'Z' dans ma clause WHERE
    Par dibox dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/04/2004, 13h21
  5. [ character en simple cote ] clause Where
    Par hocinema dans le forum DB2
    Réponses: 3
    Dernier message: 20/02/2004, 11h17

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