Bonjour à tous,
Après quelques recherches sur google je pensais avoir réussi à simuler INTERSECT mais il s'avère que je me suis un peu avancé...
Voici le scénario testé.
J'ai deux tables liées par la clef étrangère b_fk_a
TableA
a_id
1
2
3
TableB
b_id - b_fk_a - b_val
1 - 1 - rouge
2 - 1 - bleu
3 - 2 - rouge
4 - 3 - bleu
Je fais cette requête pour récupérer les a_id qui possède à la fois la valeur rouge et la valeur bleu :
Ca fonctionne, j'obtiens bien un seul a_id = 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT DISTINCT a_id FROM tableB AS b0 CROSS JOIN tableB AS b1 INNER JOIN tableA ON a_id = b1.b_fk_a WHERE (b0.b_val = 'rouge' AND b1.b_val = 'bleu')
Le problème c'est que ça ne fonctionne plus 'avec de plus grandes tables et un filtre sur plus de deux valeurs.
Exemple :
Je me retrouve avec beaucoup plus de valeurs que ce que je devrais...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT DISTINCT a_id FROM tableB AS b0 CROSS JOIN tableB AS b1 CROSS JOIN tableB AS b2 INNER JOIN tableA ON a_id = b2.b_fk_a WHERE (b0.b_val = 'rouge' AND b1.b_val = 'bleu' AND b2.b_val = 'vert')
Je pense que je m'y prends mal et que la requête sur 2 valeurs marchent par chance. Mais je ne vois pas d'où ça vient.
Merci d'avance à ceux qui prendront le temps de me lire.
Partager