sql >> Databasteknik >  >> RDS >> Mysql

MySQL:många till många relationer med flera OCH tillstånd

Du kan ändra din nuvarande fråga något för att få de resultat du vill ha:

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;

Detta skulle returnera alla föremål som har både sport och leather taggar. Det fungerar genom att aggregera efter objekt (som du redan gjorde), men sedan hävda i en HAVING klausul att det finns två distinkta matchande taggar. Eftersom vi begränsade till endast dessa två taggar i WHERE sats, om HAVING kontrollera passerar efter aggregering, innebär det att artikeln är en matchning.



  1. Hur räknar man om primärindex?

  2. PHP/MySQL bättre användarsökning

  3. Mysql-lösning för fönsterfunktioner

  4. Postgres-kodning UTF8-fel när bilder infogas via Java