Aangezien een recept meerdere ingrediënten kan gebruiken en u op zoek bent naar recepten die een of meer van de gespecificeerde ingrediënten gebruiken, moet u de DISTINCT
gebruiken trefwoord om dubbele resultaten te voorkomen wanneer een recept meer dan één ingrediënt uit de opgegeven lijst gebruikt. U kunt ook IN
. gebruiken clausule om op meerdere ingrediënt-ID's te filteren.
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);
Als u op zoek bent naar recepten die alle ingrediënten in de lijst gebruiken, kunt u de resultaten groeperen op receptnaam en controleren of het aantal records hetzelfde is als het aantal ingrediënten in uw lijst.
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
Dit veronderstelt dat er geen dubbele records zijn met dezelfde (recipe_id, ingrediënt_id) tuple (beter verzekerd met een UNIEKE beperking).