Query MySql su relazione molti-a-molti
-
05-07-2019 - |
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?
Soluzione
Query SQL che fornisce risultati distinti che corrispondono a più colonne
È questo ciò che stai cercando?
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 )
)