Чтобы посмотреть список рецептов на основе списка ингредиентов, где рецепт должен содержать эти ингредиенты, но также может иметь больше, вы можете попробовать что-то вроде этого:
SELECT R.name
FROM Recipe R, Ingredients I, Relationship Rel
WHERE I.ingredients_name = 'Chicken' AND Rel.ingredients_id = I.id AND
Rel.recipe_id=R.id
INTERSECT
SELECT R.name
FROM Recipe R, Ingredients I, Relationship Rel
WHERE I.ingredients_name = 'Mayo' AND Rel.ingredients_id = I.id AND
Rel.recipe_id=R.id
Что этоон находит все рецепты, в которых «Цыпленок» является ингредиентом, и пересекает его со всеми рецептами, где «Мейо» является ингредиентом.Это дает вам рецепты, где «Цыпленок» и «Мейо» являются обоими ингредиентами для данного рецепта.
Если подумать, в MySQL нет ключевого слова INTERSECT.В таком случае попробуйте это:
SELECT DISTINCT R.name FROM Recipe R
INNER JOIN (SELECT R.name
FROM Recipe R, Ingredients I, Relationship Rel
WHERE I.ingredients_name = 'Chicken' AND Rel.ingredients_id = I.id AND
Rel.recipe_id=R.id) as recipeA
INNER JOIN (SELECT R.name
FROM Recipe R, Ingredients I, Relationship Rel
WHERE I.ingredients_name = 'Mayo' AND Rel.ingredients_id = I.id AND
Rel.recipe_id=R.id) as recipeB