Bonjour,
J'ai 3 tables:
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))
J'ai un formulaire de commentaires où je peux saisir soit :
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:
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
Sauf que si je garde cela, j'aurai la valeur null dans les cas 1/ et 3/
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_id
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 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
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
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?
D'avance merci,
Julien