Bonjour,
Je suis en train d'étudier l'article sur les méta données pour les besoins de mon progiciel et j'ai quelques soucis.
La fin de l'article donne deux requêtes qui ne fonctionnent pas :
Je ne parle pas des petites coquilles dans les noms de tables et alias, mais bien de la structure de la requête.
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 * FROM TR_PROSPECT_PRP PRP LEFT OUTER JOIN T_DONNEE_DON DON ON PRP.PRP_ID = DON.CRE_LIGNE LEFT OUTER JOIN TR_TABLES_TBL TBL ON DON.TBL_ID = TBL.TBL_ID LEFT OUTER JOIN TR_CARACTERISTIQUE_CAR CAR ON DON.CAR_ID = CAR.CAR_ID WHERE TBL.TBL_SQL_NOM = 'TR_PROSPECT_PRP' AND CAR.CAR_LIBELLE = 'Carac_1' AND CRE.CRE_VALEUR = valeur 1 AND CAR.CAR_LIBELLE = 'Carac_2' AND CRE.CRE_VALEUR = valeur 2 AND CAR.CAR_LIBELLE = 'Carac_3' AND CRE.CRE_VALEUR = valeur 3 AND CAR.CAR_LIBELLE = 'Carac_4' AND CRE.CRE_VALEUR = valeur 4
En effet, si je comprends bien comment cela fonctionne, il ne me semble pas possible d'écrire dans la même requête :
Si valeur1 != valeur2 alors forcément cela ne renvoie pas de lignes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 AND DON.CRE_VALEUR = valeur 1 ... AND DON.CRE_VALEUR = valeur 2
Pour que la requête marche, il faut faire autant de jointures que de caractéristiques recherchées.
Première question : suis je dans le vrai ?
Mon deuxième problème est que je ne connais pas le nombre de caractéristiques à l'avance, je ne peux donc pas utiliser la technique des jointures multiples.
En fait je dois écrire une requête qui sélectionne des lignes dans une table. Le nombre de colonnes de cette requête est fixe. Pour chaque ligne de cette requête, je dois trouver une autre ligne dans une autre table.
Vous allez me dire que c'est tout simplement par une jointure. Oui mais, je ne connais pas le nombre ni le nom des colonnes qui servent à la jointure.
C'est pourquoi je cherche du coté des métas données. Je pense que je peux m'en sortir avec ça.
Deuxième question : suis je obligé de passer par du SQL dynamique (j'aimerais éviter) ou bien existe t-il une technique pour faire cela ?
Merci pour votre aide...
Partager