sql >> Database teknologi >  >> RDS >> Mysql

mysql join table forespørgsel 2 værdier

Der er mange måder at løse dette på; det mest ligetil ville nok være at bruge et par exists klausuler, eller join attributes tabel to gange, men du kan også bruge group by og having klausuler for at opnå det samme resultat:

-- option 1: using multiple exists clauses select p.id, p.productname from Products p where exists (select 1 from Attributes a where p.ID = a.ProductID and a.AttributeID = 3) and exists (select 1 from Attributes a where p.ID = a.ProductID and a.AttributeID = 4); -- option 2: using multiple joins select p.id, p.productname from Products p join Attributes a3 on p.ID = a3.ProductID join Attributes a4 on p.ID = a4.ProductID where a3.AttributeID = 3 and a4.AttributeID = 4; -- option 3: using aggregate and having select p.id, p.productname from Products p join Attributes a on p.ID = a.ProductID group by p.id, p.productname having sum(case when a.AttributeID = 3 then 1 else 0 end) > 0 and sum(case when a.AttributeID = 4 then 1 else 0 end) > 0; -- option 4: using having and count select p.id, p.productname from Products p join Attributes a on p.ID = a.ProductID where a.AttributeID in (3,4) group by p.id, p.productname having count(distinct a.attributeid) = 2;

Hvilken måde der er bedst for dig, vil sandsynligvis afhænge af hvilket resultat du har brug for og indekser osv.

Sample SQL Fiddle.




  1. MySQL LIMIT på DELETE-sætning

  2. MYSQL Dedupliker og fjern den dubletrække med mindst data

  3. Kan ikke se mySQL COUNT fra 3. tabel

  4. Hvordan kan jeg kontrollere, om datointerval eksisterer