Domanda

Un esempio molto semplice di una relazione n: m che mi confonde. Supponiamo di avere due tabelle " Plant " e " Attributo " e un'altra tabella tra loro che tiene la loro relazione con i loro ID:

Plant--------hasAttribute--------Attribute
               P1 | A1
               P1 | A2
               P1 | A3
               P2 | A1
               P2 | A2
               P3 | A2
               P3 | A3 

Quindi, la pianta 1 ha gli attributi 1,2 e 3. La pianta 2 ha gli attributi 1 e 2 e la pianta 3 ha gli attributi 2 e 3. Ora, in una singola query, come posso ottenere ad es. tutte le piante che hanno gli attributi 2 e 3? Il risultato dovrebbe restituire P1 e P3 perché entrambi hanno gli attributi 2 e 3. Stavo provando l'unione, ma anche questo mi darà P2 ... qualche idea?

È stato utile?

Altri suggerimenti

Questa struttura di query evita la necessità di una clausola distinta (a condizione che non vi siano record duplicati nella tabella di risoluzione).

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 ) 
  )
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top