Yop all,je voyais pas du tout comment nommer correctement ce post
Le problème de base est une jointure, mais ce que j'aimerais récupérer est un peu particulier, je m'explique :
Imaginons la table 1, avec un champ ID
Imaginons la table 2, avec un champ ID (qui correspond à l'ID de la table 1, une FK quoi), et un champ valeur
Je souhaite récupérer tous les enregistrements de la table 1 satisfaisant simultanément plusieurs conditions de valeur dans la table 2.
Exemple :
Table 1 :
1 enregistrement : ID = 1
Table 2 :
1er enregistrement : ID = 1, valeur = 1
2eme enregistrement : ID = 1, valeur = 2
je souhaite récupérer les enregistrements de la table 1 qui possèdent la valeur 1 et la valeur 2 dans la table 2.
Si je fais ça :
Code :
- select * from table1 as t1
- inner join table2 as t2
- on t1.id = t2.id
- where t2.valeur = 1 and t2.valeur = 2
|
je ne récupère rien.
SI je fais ça :
Code :
- select * from table1 as t1
- inner join table2 as t2
- on t1.id = t2.id
- where t2.valeur = 1 or t2.valeur = 2
|
je vais récupérer les enregistrements qui n'ont que valeur égal à 1, ou que valeur = 2.
Moi je veux les enregistrements qui ont leurs valeur égale à 1 et à 2.
J'ai donc trouvé ça :
Code :
- select * from table1 as t1
- inner join table2 as t2
- on t1.id = t2.id
- inner join table2 as t3
- on t1.id = t3.id
- where t2.valeur = 1 and t3.valeur = 2
|
Là très bien ça marche, mais .... une jointure par critère, c'est abusif. Si j'ai 20 critères de recherche, je vais pas faire 20 jointures ....
Y a un autre moyen de faire ça ?
A vot'bon coeur m'sieur dame !
Message édité par Djebel1 le 15-05-2006 à 17:20:12