Requête MySql sur une relation plusieurs à plusieurs
-
05-07-2019 - |
Question
Un exemple très simple de relation n: m qui me laisse perplexe. Supposons que nous ayons deux tables " Plant " et " Attribut " et une autre table entre eux tenant leur relation avec leurs identifiants:
Plant--------hasAttribute--------Attribute
P1 | A1
P1 | A2
P1 | A3
P2 | A1
P2 | A2
P3 | A2
P3 | A3
Ainsi, l’usine 1 a les attributs 1,2 et 3. L’usine 2 a les attributs 1 et 2 et l’usine 3 a les attributs 2 et 3. Maintenant, en une seule requête, comment puis-je obtenir par exemple toutes les plantes qui ont les attributs 2 et 3? Le résultat devrait retourner P1 et P3 car ils ont tous les deux les attributs 2 et 3. J'essayais de m'unir, mais cela me donnerait aussi P2 comme résultat… des idées?
La solution
requête SQL donnant des résultats distincts correspondant à plusieurs colonnes
Est-ce ce que vous cherchez?
Autres conseils
Cette structure de requête évite le recours à une clause distincte (à condition qu'il n'y ait pas d'enregistrements en double dans la table de résolution).
SELECT p.PlantID
FROM
Plant p INNER JOIN PlantAttribute pa
ON p.PlantID = pa.PlantID AND pa.AttributeID = 1
INNER JOIN PlantAttribute pa2
ON p.PlantID = pa2.PlantID AND pa2.AttributeID = 2;
select * from Plants p where 2 = (
select count(*) from HasPlants h
where h.pid = p.id and h.aid in ( a2, a3 )
)