Problème de jointure

Résolu
vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006 - 14 déc. 2005 à 12:10
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 - 14 déc. 2005 à 15:20
Bonjour,
J'ai un problème de jointure.

La table identif_officiel décrit les incidents survenus à l'infrastructure ferroviaire.
La table constat_officiel contient, éventuellement pour chaque identif_officiel.id, un constat d'exploitation structuré en trois paramètres (entiers) : lnk_domaine, lnk_classe et lnk_texte.
Les tables domaine_constat, classe_constat et texte_constat contiennent les libellés en clair (en deux langues) correspondant respectivement au lnk_domaine, lnk_classe et lnk_texte encodé dans la table identif_officiel.

Voici la requête que j'écris pour lire touts les incidents
SELECT
IDENTIF_OFFICIEL.ID,
... ... ...
GARE.LBL_GARE,
GRT.LBL_GRT,
LOC_CODE.F_LOC_CODE,
ARRONDISSEMENT.LBL_ARR,
DOMAINE_CONSTAT.F_DOMAINE,
CLASSE_CONSTAT.F_CLASSE,
TEXTE_CONSTAT.F_TEXTE
FROM
IDENTIF_OFFICIEL
LEFT OUTER JOIN GARE ON (IDENTIF_OFFICIEL.VIA_GARE=GARE.ID)
LEFT OUTER JOIN GRT ON (IDENTIF_OFFICIEL.VIA_DISREG=GRT.ID)
LEFT OUTER JOIN LOC_CODE ON (IDENTIF_OFFICIEL.LOC_CODE=LOC_CODE.ID_LOC_CODE)
LEFT OUTER JOIN ARRONDISSEMENT ON (IDENTIF_OFFICIEL.VIA_ARR=ARRONDISSEMENT.ID)
RIGHT OUTER JOIN CONSTAT_OFFICIEL ON (CONSTAT_OFFICIEL.LNK_IDENTIF=IDENTIF_OFFICIEL.ID)
LEFT OUTER JOIN DOMAINE_CONSTAT ON (CONSTAT_OFFICIEL.LNK_DOMAINE=DOMAINE_CONSTAT.ID_DOMAINE)
LEFT OUTER JOIN CLASSE_CONSTAT ON (CONSTAT_OFFICIEL.LNK_CLASSE=CLASSE_CONSTAT.ID_CLASSE)
LEFT OUTER JOIN TEXTE_CONSTAT ON (CONSTAT_OFFICIEL.LNK_TEXTE=TEXTE_CONSTAT.ID_TEXTE)

Mon problème est que les record identif_officiel.id qui n'ont pas de correspondant dans constat_incident ne sont pas repris. En fait, les trois dernières jointures du select rejètent les cas où lnk_domaine, lnk_classe et lnk_texte sont NULL.

Les clefs étrangéres entre les tables sont :

ALTER TABLE CONSTAT_OFFICIEL ADD CONSTRAINT FK_LNK_CONSTAT_OFF FOREIGN KEY (LNK_IDENTIF) REFERENCES IDENTIF_OFFICIEL (ID) ON DELETE CASCADE;
ALTER TABLE CONSTAT_OFFICIEL ADD CONSTRAINT FK_NOM_CLASSE_OFF FOREIGN KEY (LNK_CLASSE) REFERENCES CLASSE_CONSTAT (ID_CLASSE) ON DELETE SET DEFAULT;
ALTER TABLE CONSTAT_OFFICIEL ADD CONSTRAINT FK_NOM_DOMAINE_OFF FOREIGN KEY (LNK_DOMAINE) REFERENCES DOMAINE_CONSTAT (ID_DOMAINE) ON DELETE SET DEFAULT;
ALTER TABLE CONSTAT_OFFICIEL ADD CONSTRAINT FK_NOM_TEXTE_OFF FOREIGN KEY (LNK_TEXTE) REFERENCES TEXTE_CONSTAT (ID_TEXTE) ON DELETE SET DEFAULT;

Une idée svp ? Où est-ce que je me plante ?
Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans.

1 réponse

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 2
14 déc. 2005 à 15:20
salut,

as tu essayé avec un FULL OUTER JOIN quand tu fais des jointures sur les tables qui n'ont pas forcement de resultat ?
3
Rejoignez-nous