sql >> Database >  >> RDS >> Mysql

MySQL:veel-op-veel-relatie met meerdere AND-condities

U kunt uw huidige zoekopdracht enigszins wijzigen om de gewenste resultaten te krijgen:

SELECT i.id, i.name    -- OK to select name assuming id is the PK
FROM item i
LEFT JOIN relation r
    ON i.id = r.item_id
LEFT JOIN tag t
    ON t.id = r.tag_id
WHERE t.tag IN ('sport', 'leather')
GROUP BY i.id
HAVING COUNT(DISTINCT t.tag) = 2;

Dit zou alle items retourneren die zowel sport . hebben en leather labels. Het werkt door te aggregeren per item (zoals je al deed), maar dan te beweren in een HAVING clausule dat er twee verschillende overeenkomende tags zijn. Omdat we ons hebben beperkt tot alleen deze twee tags in de WHERE clausule, als de HAVING check passeert na aggregatie, dit impliceert dat het item een ​​match is.



  1. Hoe verander ik het type opslagengine op MySQL?

  2. SINH() Functie in Oracle

  3. PostgreSQL-subtekenreeks haal tekenreeks tussen haakjes

  4. Hoe voeg je een tabel toe aan deze SQL-code?