0
私はRECIPES
、INGREDIENTS
およびRECIPE_INGREDIENTS
の3つのテーブルを持っています。今では、提供された成分IDだけを含むレシピを取得したいと考えています。私は簡単な言葉私が持っている食材から作ることができるレシピを探したい。特定の成分のみを含むレシピの一致する行を見つける
私はRECIPES
、INGREDIENTS
およびRECIPE_INGREDIENTS
の3つのテーブルを持っています。今では、提供された成分IDだけを含むレシピを取得したいと考えています。私は簡単な言葉私が持っている食材から作ることができるレシピを探したい。特定の成分のみを含むレシピの一致する行を見つける
:
SELECT r.id
FROM Recipes AS r
INNER JOIN Recipe_ingredients AS ri ON r.id = ri.recipe_id
INNER JOIN Ingredients AS i ON i.id = ri.ingredient_id
WHERE i.id IN (... list of ids here ...)
GROUP BY r.id
HAVING COUNT(DISTINCT i.id) <= n -- where n is the number of the ingredient ids
-- specified in the list of the where clause
編集:をあなたがドン」のレシピを取得したい場合
SELECT r.id
FROM Recipes AS r
LEFT JOIN Recipe_ingredients AS ri ON r.id = ri.recipe_id
LEFT JOIN Ingredients AS i ON i.id = ri.ingredient_id
WHERE i.id NOT IN (... list of ids here ...)
GROUP BY r.id
HAVING COUNT(i.id) = 0
これは、すべての既存の成分を含むレシピを表示しますが、これは実際に求められたものとは微妙に異なります。除外結合は実際にはこのインスタンスで必要なものです。私が持っていない成分は含まれていないすべてのレシピです。 – Strawberry
@Strawberry私のクエリは、*指定された*成分IDのすべて*のみ*を含むレシピを返すと思います。 –
私はあなたが間違っていると思う - そして、それはまだ*何が欲しいものではない! – Strawberry