Bonjour,
J'ai 3 tables:
J'ai un formulaire de commentaires où je peux saisir soit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 comment(com_id int, value varchar(60), comment_type_id int, comment_sous_type_id int) comment_type (comment_type_id int, value varchar(15)) comment_sous_type(comment_sous_type_id int, value varchar(30))
1/ un type et un sous-type de commentaire et un texte de commentaire
2/ un type de commentaire et un texte de commentaire
3/ uniquement un texte de commentaire
Lorsque je veux afficher mes commentaires, je passe par une table temporaire #result où je mets à jour spécifiquement mes colonnes une à une, celle du comment donne ceci:
Sauf que si je garde cela, j'aurai la valeur null dans les cas 1/ et 3/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 update #result set comment = ct.value + '/' + cst.value + '/' + c.value from #result r, comment c, comment_type ct, comment_sous_type cst where c.com_id = 10 and c.comment_type_id = ct.comment_type_id and c.comment_type_id = cst.comment_type_id and c.comment_sous_type_id = cst.comment_sous_type_id
Pour régler ça, une solution est de faire trois updates correspondants aux trois cas, ce qui donne ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 1/ update #result set comment = ct.value + '/' + cst.value + '/' + c.value from #result r, comment c, comment_type ct, comment_sous_type cst where c.com_id = 10 and c.comment_type_id = ct.comment_type_id and c.comment_type_id = cst.comment_type_id and c.comment_sous_type_id = cst.comment_sous_type_id
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 2/ update #result set comment = ct.value + '/' + cst.value + '/' + c.value from #result r, comment c, comment_type ct where c.com_id = 10 and c.comment_type_id = ct.comment_type_idMais je sens qu'une manière plus concise en une requête serait possible en utilisant les jointures externes, du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 3/ update #result set comment = ct.value + '/' + cst.value + '/' + c.value from #result r, comment c where c.com_id = 10
Mais il me semble que cela n'est pas valable par rapport à mon schéma de données (par rapport à ce qui est en rouge). Jointure externe sur une table dont la clef implique deux colonnes... bref, pensez-vous que cette requête est correcte et si non, suis-je obligé de passer par mes trois requêtes décrites plus haut?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 update #result set comment = ct.value + '/' + cst.value + '/' + c.value from #result r, comment c, comment_type ct, comment_sous_type cst where c.com_id = 10 and c.comment_type_id *= ct.comment_type_id and c.comment_type_id *= cst.comment_type_id and c.comment_sous_type_id *= cst.comment_sous_type_id
D'avance merci,
Julien
Partager