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

MySQL Vælg Where In Many to Many

Forudsat at du vil have mere end blot artiklens id:

SELECT a.id
      ,a.other_stuff
  FROM articles a
  JOIN article_category ac
    ON ac.article_id = a.id
GROUP BY a.id
HAVING GROUP_CONCAT(DISTINCT ac.category_id ORDER BY ac.category_id SEPARATOR ',') = '1,2'

Hvis alt du ønsker er artiklens id, så prøv dette:

SELECT article_id
  FROM article_category 
GROUP BY article_id
HAVING GROUP_CONCAT(DISTINCT category_id ORDER BY category_id SEPARATOR ',') = '1,2'

Se den i aktion på http://sqlfiddle.com/#!2/9d213/4

Skal også tilføje, at fordelen ved denne tilgang er, at den kan understøtte kontrol af et vilkårligt antal kategorier uden at skulle ændre forespørgslen. Gør bare '1,2' til en strengvariabel og skift hvad der sendes ind i forespørgslen. Så du kan lige så nemt søge efter artikler med kategori 1, 2 og 7 ved at sende en streng på '1,2,7'. Der kræves ingen yderligere joinforbindelser.



  1. Sådan får du den auto-increment primære nøgleværdi i MySQL ved hjælp af Hibernate

  2. Kan ikke få MySQL-kildeforespørgsel til at virke ved hjælp af Python mysqldb-modul

  3. SQLite-transaktion

  4. Hvordan vælger man poster med kun et dublet felt og alle andre feltværdier?