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 :

[PostgreSQL 8.1] Problème de jointures avec une Fk null


Sujet :

Langage SQL

  1. #1
    Membre confirmé

    Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2004
    Messages : 178
    Points : 645
    Points
    645
    Par défaut [PostgreSQL 8.1] Problème de jointures avec une Fk null
    Bonjour à tous !

    Avant d'expliquer mon problème, une rapide présentation du shéma de BDD.

    J'ai 3 tables:

    - Source: indique une source de donnée (Clef Usb, DVD, chemin d'accès...)

    - Dossier: renseigne sur les dossiers contenus dans la source.
    Possède une Fk sur Source (dossier.source) pour y être rattachés (une source contenant des dossiers).
    Possède une Fk sur lui-même, un dossier pouvant contenir un dossier (égale à NULL si ils n'ont pas de dossier parent, ce qui est le cas des dossiers à la racine de la source).

    - Fichier: renseigne donc sur ... un fichier :p
    Possède une Fk sur Source (fichier.source) pour y être rattachés.
    Possède une Fk sur Dossier (fichier.dossier): un fichier pouvant être rattaché à un dossier, cette Fk sera alors égale à dossier.id, MAIS si les fichiers sont à la racine de la source (donc pas dans un dossier), cette Fk a pour valeur NULL.

    J'aimerais faire une requête me permettant de ramener tous les fichiers d'une source ainsi que les dossiers correspondant.

    Voici la coupable en question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT fichier.nom, dossier.nom
    FROM source INNER JOIN fichier ON(source.id= fichier.source)
                      INNER JOIN dossier ON(fichier.dossier=dossier.id)
    WHERE source.id=1;
    La 1ere jointure me ramène donc tous les fichiers, y compris ceux étant à la racine (donc avec un fichier.dossier=NULL). Jusqu'à là, c'est ok.

    La 2nd jointure va filtrer uniquement les fichiers appartenant à un dossier.

    Et c'est là c'est le drame, les fichiers reliés directement à la racine sont liquidés, ce qui est logique quelque part...

    Alors voilà, je sais d'où vient le problème, mais je ne sais pas comment tout avoir en une seule requête...

    J'ai bien pensé à rajouter un OR fichier.dossier=NULL dans la jointure, mais là cela me ramène trop d'enregistrement :s

    Comment s'y prendre ?

    En espérant avoir été clair, merci !

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Saut,

    Que donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT fichier.nom, dossier.nom
      FROM source INNER JOIN fichier ON source.id = fichier.source
                   LEFT JOIN dossier ON fichier.dossier = dossier.id
    WHERE source.id=1;
    Tu trouveras un tuto très complet sur les jointures ici : Les jointures, ou comment interroger plusieurs tables
    Jete un oeil en particulier aux jointures externes
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Membre confirmé

    Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2004
    Messages : 178
    Points : 645
    Points
    645
    Par défaut
    Sublime, ça donne exactement le résultat voulu, les fichiers n'ayant pas de relation avec un dossier sont affichés...

    Merci beaucoup ! Surtout pour les liens ça va bien me servir, je débute en SQL :p

    Encore merci !

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

Discussions similaires

  1. Probléme de jointure dans une requete avec UNION
    Par MissOleana dans le forum Requêtes
    Réponses: 1
    Dernier message: 28/11/2013, 15h45
  2. Jointure avec une composante NULL
    Par vmolines dans le forum Langage SQL
    Réponses: 11
    Dernier message: 08/04/2008, 12h30
  3. Réponses: 1
    Dernier message: 18/07/2007, 11h58
  4. problème de connexion avec une base firebird
    Par vbcasimir dans le forum Bases de données
    Réponses: 1
    Dernier message: 30/05/2005, 11h40
  5. Problèmes d'accent avec une connexion ODBC et ADO
    Par michael.jacques dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/03/2005, 15h36

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