Given the following tables:
Recipes
| id | name
| 1 | \'chocolate cream pie\'
| 2 | \'banana cream pie\'
| 3 | \'chocolate banana surprise\'
Ingredients
This is called relational division. A variety of techniques are discussed here.
One alternative not yet given is the double NOT EXISTS
SELECT r.id, r.name
FROM Recipes r
WHERE NOT EXISTS (SELECT * FROM Ingredients i
WHERE name IN ('chocolate', 'cream')
AND NOT EXISTS
(SELECT * FROM RecipeIngredients ri
WHERE ri.recipe_id = r.id
AND ri.ingredient_id = i.id))