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?

Était-ce utile?

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 ) 
  )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top