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

MySQL:mange til mange forhold med flere OG tilstand

Du kan ændre din aktuelle forespørgsel lidt for at få de ønskede resultater:

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;

Dette ville returnere alle varer, der både har sport og leather tags. Det fungerer ved at aggregere efter element (som du allerede gjorde), men derefter hævde i en HAVING klausul, at der er to forskellige matchende tags. Da vi kun begrænsede disse to tags i WHERE klausul, hvis HAVING check passerer efter sammenlægning, betyder det, at varen er et match.



  1. JOINS vs. while-udsagn

  2. WordPress-databasefejl MySQL-serveren er forsvundet for forespørgsel

  3. DROP TABEL HVIS FINDER Eksempel i PostgreSQL

  4. Sådan laver du en forespørgsel med group_concat i sql server