実際に非常に簡単なSQLステートメントを作成しようとすると、自分自身が失われてしまいます。
3つのテーブルを持つデータベースを取得しました。
- レシピ-料理用のレシピ名を保存する
- 材料_レシピ-材料とレシピをリンクします
- 材料-レシピで使用される材料。
二重にクリアにするために、次のように保存されます。
レシピ:
id | 名前 1 | ラザニアアラボロネーゼ 2 | トマトとマグロ
材料:
id | 名前 1 | ラザニアスライス 2 | 肉 3 | トマト 4 | ツナ
と参加テーブルの材料_レシピ:
成分ID| レシピID 1 | 1 2 | 1 3 | 1 3 | 2 4 | 2
ご覧のとおり、少なくともいくつかのスパイスを与える必要がある2つの本当に非デリシオなレシピがあります。でも前にやりたいのは具材でレシピを選ぶことです。
私はすべてのレシピに肉とトマトを入れたいです:
SELECT recipes.name FROM recipes r
INNER JOIN ingredients_recipes ir ON ir.recipes_id = r.id
WHERE ir.ingredient_id IN ( 2 ) AND ir.ingredient_id IN ( 3 )
->ラザニア..元気!(「トマト」、「トマト」、「トマト、スライス」などの材料がたくさんある可能性があるため、INを使用します。)
たとえば、トマトはあるがマグロはないすべてのレシピが必要な場合は、次のことを試しました。
SELECT recipes.name FROM recipes r
INNER JOIN ingredients_recipes ir ON ir.recipes_id = r.id
WHERE ir.ingredient_id IN ( 2 ) AND ir.ingredient_id NOT IN ( 4 )
->まだマグロを手に入れています-私が参加する行の1つに材料4が含まれていないためです。わかりました:/
私が今疑問に思っているのは、希望する結果を得るために何をしなければならないかということです。私は現在、次のような副選択を行うことで膝に矢印を付けています。
SELECT recipes.name FROM recipes r
INNER JOIN ingredients_recipes ir ON ir.recipes_id = r.id
WHERE (
ir.ingredient_id IN ( 2 ) -- or more..
AND
recipes.id NOT IN ( SELECT recipes_id FROM ingredients_recipes
WHERE ingredient_id IN ( 4 ) -- actually i paste names of the ingredients.. but that is not the case. just to shorten the query.. by filling in a comment twice as long..
)
)
私はmySQLにまったく慣れていないので、何をグーグルで検索すればよいのかさえわかりません。したがって、その場合のヘルプ、およびo/cより良いSQLステートメントは..
IN(awesome).
編集:ああ、そしてはい、私は実際にグループ化を行います.. ;-)