sql >> Databasteknik >  >> RDS >> Mysql

Receptdatabas, sök på ingrediens

Eftersom ett recept kan använda flera ingredienser och du letar efter recept som använder en eller flera av de angivna ingredienserna, bör du använda DISTINCT nyckelord för att förhindra dubbletter av resultat där ett recept använder mer än en ingrediens från den angivna listan. Du kan också använda IN klausul för att filtrera på flera ingrediens-ID:n.

select DISTINCT r.name
from 
    recipes r
    inner join ingredient_index i
    on i.recipe_id = r.recipe_id
where i.ingredient_id IN (7, 5);

Alternativt, om du letar efter recept som använder alla ingredienser som anges i listan, kan du gruppera resultaten efter receptnamn och kontrollera om antalet poster är samma som antalet ingredienser i din lista.

select r.name
from 
    recipes r
    inner join ingredient_index i
    on i.recipe_id = r.recipe_id
where i.ingredient_id IN (7, 5)
GROUP BY r.name
HAVING COUNT(*) = 2

Detta förutsätter att det inte kommer att finnas dubbletter av poster med samma (recept_id, ingrediens_id) tupel (bättre säkerställt med en UNIK begränsning).



  1. Hur man låser en enda rad

  2. Hur stänger man inaktiva anslutningar i PostgreSQL automatiskt?

  3. Oracle till PostgreSQL — Markörer och vanliga tabelluttryck

  4. Gruppera efter värde RAND()