2016-11-11 11 views
0

私はRECIPESINGREDIENTSおよびRECIPE_INGREDIENTSの3つのテーブルを持っています。今では、提供された成分IDだけを含むレシピを取得したいと考えています。私は簡単な言葉私が持っている食材から作ることができるレシピを探したい。特定の成分のみを含むレシピの一致する行を見つける

あなたが特定の成分の、すべてを持つレシピのIDS、または一部を取得するために、次のクエリを使用することができます

答えて

0

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 
+0

これは、すべての既存の成分を含むレシピを表示しますが、これは実際に求められたものとは微妙に異なります。除外結合は実際にはこのインスタンスで必要なものです。私が持っていない成分は含まれていないすべてのレシピです。 – Strawberry

+0

@Strawberry私のクエリは、*指定された*成分IDのすべて*のみ*を含むレシピを返すと思います。 –

+0

私はあなたが間違っていると思う - そして、それはまだ*何が欲しいものではない! – Strawberry

関連する問題