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:
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.
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 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 !
Partager