Bonsoir, aujourd'hui j'ai eu du mal à effectuer une requête et j'ai presque touché le but donc j'espère que vous aller corriger mon erreur

Contexte :

Dans une appli qui gère le multi-langages, je veux créer une requête qui me retourne tous mes sports :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
SELECT ID_SPORT, LIB_SPORT
FROM SPORT
Maintenant je veux "greffer" la traduction, donc avoir un LIB_SPORT qui correspond par défaut, et, si la traduction existe, la joindre à mon résultat sinon renvoyer NULL.

J'en arrive donc à ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT SPORT.ID_SPORT, SPORT.LIB_SPORT, SPORT_TRAD.LIB_SPORT AS "LIB_SPORT_TRAD"
FROM SPORT
LEFT JOIN SPORT_TRAD ON SPORT.ID_SPORT = SPORT_TRAD.ID_SPORT
Par exemple, si j'ai 2 sports, "Aviron" (ID = 1) qui possède une traduction en anglais, allemand et espagnol ; et "Football" (ID = 2) qui n'en possède pas, la requête me retourne ceci :

ID_SPORT LIB_SPORT LIB_SPORT_TRAD
1 Aviron Rowing
1 Aviron Ruder
1 Aviron Remo
2 Football NULL

Enfin, et c'est là que ça devient compliqué, je veux récupérer uniquement les traductions dans la langue du site. Comme il se peut qu'un champ ne soit pas traduit, dans ce cas là le champ utilisé est celui par défaut (LIB_SPORT) qui est en français.

Une table LANGUE liée avec SPORT_TRAD me permet de filtrer cela. Voilà comment j'ai fait :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SELECT SPORT.ID_SPORT, SPORT.LIB_SPORT, SPORT_TRAD.LIB_SPORT AS "LIB_SPORT_TRAD"
FROM SPORT
LEFT JOIN SPORT_TRAD ON SPORT.ID_SPORT = SPORT_TRAD.ID_SPORT
LEFT JOIN LANGUE ON SPORT_TRAD.ID_LANGUE = LANGUE.ID_LANGUE
WHERE LANGUE.LIB_LANGUE_COURT LIKE '%FR%' OR SPORT_TRAD.ID_LANGUE IS NULL
(FR peut bien sûr varier avec UK, DE ou ES via un paramètre)
J'arrive à avoir ce que je veux quand la langue de traduction existe mais pas quand je reste en français.

Ex. qui fonctionne avec 'UK' par exemple :

ID_SPORT LIB_SPORT LIB_SPORT_TRAD LIB_LANGUE_COURT
1 Aviron Rowing UK
2 Fooball NULL NULL

Ex. qui ne fonctionne pas avec FR :

ID_SPORT LIB_SPORT LIB_SPORT_TRAD LIB_LANGUE_COURT
2 Fooball NULL NULL

Ce que je veux :

ID_SPORT LIB_SPORT LIB_SPORT_TRAD LIB_LANGUE_COURT
1 Aviron NULL NULL
2 Fooball NULL NULL

Voilà, je touche au but mais il manque encore une étape

Merci d'avance pour votre aide, j'ai essayé d'être clair mais si vous avez besoin de plus d'informations demandez-moi ! (je n'ai pas le code sous les yeux, donc il se peut que mes requête soient fausses, mais globalement les relations sont là).

Cordialement,