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 :

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
Je ne parle pas des petites coquilles dans les noms de tables et alias, mais bien de la structure de la requête.
En effet, si je comprends bien comment cela fonctionne, il ne me semble pas possible d'écrire dans la même requête :

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
Si valeur1 != valeur2 alors forcément cela ne renvoie pas de lignes.
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...