Bonjour à tous,
Je galère à construire une requête qui implique un OUTER JOIN.
J'espère que vous pourrez m'aider avec les indications suivantes :
Dans mon modèle (voir ce screenshot :), je parle de sachets (de graines). A ces sachets sont rattachées des caractéristiques. Il y en a pas mal, et les utilisateurs ne veulent pas tous les afficher à l'écran, donc ils ont des profils d'affichage dans lesquels ils choisissent les caractéristiques qu'ils veulent voir.
Les sachets sont ajoutés à des listes de semis.
Ce qui m'intéresse, c'est, pour une liste de semis donnée, d'aller chercher le parent de chaque sachet et d'afficher, selon le profil donné en paramètre, ses caractéristiques.
Une caractéristique peut prendre une valeur_id (ex : 1, 2, 3...) qui correspond à une signification (ex : bien, bof, pas bien...) . C'est valeur_id qui est stocké au niveau de la table "carac_sachet", mais l'utilisateur veut voir la signification de cette valeur, stockée dans "carac_valeurs".
Problème que je rencontre : seules les caractéristiques renseignées (celles pour lesquelles le sachet parent a une valeur) ressortent dans la requête. Je voudrais aussi voir les caractéristiques pour lesquelles il n'y a pas d'enregistrement pour le sachet. Il me semblait avoir fait ce qui fallait en insérant un left outer join, mais il doit visiblement manquer qqchose. Pourriez-vous me dire quoi ?
J'espère que tout ceci est compréhensible... Merci d'avance !
Voici la requête que j'ai tentée :
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 SELECT sachet.kav_id AS lot, semis_contenu.mispar_mashtela AS sowing_no, sachet.hore_nekeva AS parent_lot, sachet_parent.kitzur_shoshelet AS parent_gen, carac_sachet.tchuna_value AS trait_value, carac.short_name AS trait_short_name, carac_valeurs.tchuna_translation AS trait_translation, profil.profile_name AS profile_name, semis.name AS sowing_name, sachet_parent.kav_halofi AS parent_name, profil_carac.tchuna_order AS trait_order FROM kav sachet INNER JOIN reshimat_mashtela_kav semis_contenu ON sachet.kav_id = semis_contenu.kav_id AND sachet.maslul_id = semis_contenu.maslul_id INNER JOIN reshimat_mashtela semis ON semis.reshimat_mashtela_id = semis_contenu.reshimat_mashtela_id INNER JOIN kav sachet_parent ON sachet.hore_nekeva = sachet_parent.kav_id LEFT OUTER JOIN kav_tchuna carac_sachet ON sachet_parent.kav_id = carac_sachet.kav_id AND sachet_parent.maslul_id = carac_sachet.maslul_id INNER JOIN tchuna carac ON carac.tchuna_type = carac_sachet.tchuna_type INNER JOIN tchuna_value carac_valeurs ON carac.tchuna_type = carac_valeurs.tchuna_type AND carac_sachet.tchuna_value = carac_valeurs.tchuna_value INNER JOIN profile_tchuna profil_carac ON profil_carac.tchuna_type = carac.tchuna_type INNER JOIN tch_profile profil ON profil.profile_id = profil_carac.profile_id WHERE profil.profile_name = @nom_profil AND semis.name = @nom_semis
Partager