sql >> Databáze >  >> RDS >> Mysql

MySQL:vztah mnoho k mnoha s více podmínkami AND

Svůj aktuální dotaz můžete mírně upravit, abyste získali požadované výsledky:

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;

To by vrátilo všechny položky, které mají obě sport a leather značky. Funguje to tak, že se agreguje podle položek (jak jste to již dělali), ale pak se potvrdí v HAVING klauzule, že existují dva odlišné odpovídající značky. Protože jsme se omezili pouze na tyto dvě značky v WHERE klauzule, pokud je HAVING kontrola projde po agregaci, znamená to, že položka je shodná.



  1. Od XML k seznamu cest v prostředí Oracle PL/SQL

  2. Odstraňování problémů se zablokováním v SQL Server 2008

  3. Existuje nějaký jiný způsob, jak vytvořit omezení během vytváření tabulky SQL?

  4. Nelze najít sloupec s logickým názvem