Bonjour,
Je cherche une astuce pour minimiser une requête que je dois faire car très limité en nombre de caractères qu'importe le langage, l'essentiel étant dans l'approche.

L'idée est de remplacer des "sous-select" par des jointures et des conditions permettant d'être fin dans le code.

Je dois interroger un formulaire d'une base de données de mon logiciel métier dans lequel il y a des boutons-radios.

Je suis arrivé à "minimiser" les choses dans la clause FROM et à trouver les réponses à la question 1, mais je ne sais ensuite pas comment dire dans les autres clauses je veux lire les réponses à la question 2 etc.

Notez que la requête citée ici est en HQL

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
 
SELECT 
data1.caud_libelle as question1, data2.caud_libelle as question2
 
FROM
Frm_instance_formulaire as fifo
join fifo.frm_formulaire as form
join fifo.frm_instance_rubriques as irub
join irub.frm_valeurs as valeur1 
join irub.frm_formulaire_rubrique as rub1 with rub1.foru_code = 'QUESTION1'
join irub.frm_formulaire_rubrique as rub2 with rub2.foru_code = 'QUESTION2',
 
Bas_catalogue_util_data as data1
 
WHERE 
form.form_code = 'code_formulaire'
and valeur1.fval_id_objet = data1.id
Je sais bien que mon problème se situe autour de la jointure externe "Bas_catalogue_util_data as data1", mais je ne sais pas comment formuler la chose.

Je m'en sors facilement avec 2 sous-select contenant les instances de rubriques et cette jointure externe mais je suis persuadé qu'il y a mieux et plus puissant.

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
 
SELECT
(select data1.caud_libelle from fifo.frm_instance_rubriques as instrub1 
join instrub1.frm_formulaire_rubrique as frub1 
join instrub1.frm_valeurs as valrub1, 
Bas_catalogue_util_data as data1 where valrub1.fval_id_objet = data1.id
and frub1.foru_code = 'QUESTION1') 
(select data2.caud_libelle from fifo.frm_instance_rubriques as instrub2 
join instrub2.frm_formulaire_rubrique as frub2 
join instrub2.frm_valeurs as valrub2, 
Bas_catalogue_util_data as data2 where valrub2.fval_id_objet = data2.id
and frub1.foru_code = 'QUESTION1') 
 
 
FROM 
Frm_instance_formulaire as fifo
join fifo.frm_formulaire as frm
 
 
WHERE
and frm.form_code = 'code_formulaire'



Si vous pouviez m'aider à avoir la logique manquante...

Je vous remercie.