SQLの質問があります。次の一連のテーブルを使用しています。
Recipe テーブルには 5 つのレシピが含まれ、Ingredient には多くの材料 (52) が含まれ、IngredientList は連想エンティティであり、Recipe と Ingredient の間の多対多の関係の実装です。RecipeID と IngredientID は、基本的に自動インクリメント ID 番号です。
すべてのベジタリアン レシピを表示するクエリを作成しようとしています (つまり、ベジタリアン レシピを含まないレシピ)
'%beef%',
'%pork%',
'%chicken%',
'%lamb%
関連付けられている Ingredient.Name のいずれかで)。私が直面している問題は、結果セットにレシピごとに 1 行ではなく、材料ごとに 1 行が含まれていることです。
この結果セットを生成するクエリは次のとおりです (ここでは Ingredient テーブルの名前が components であることに注意してください)。
SELECT recipe.name AS Dish, ingredients.name
FROM (recipe JOIN ingredientlist ON recipe.recipeid=ingredientlist.recipeid
JOIN ingredients ON ingredientlist.ingredientid=ingredients.ingredientid)
WHERE ingredients.name NOT LIKE '%beef%'
AND ingredients.name NOT LIKE '%chicken%'
AND ingredients.name NOT LIKE '%pork%'
AND ingredients.name NOT LIKE '%lamb%';
そのクエリは 50 の結果を生成します (私の WHERE 句によって除外された部分文字列を含む成分名に基づいて 2 つの成分が除外されるため、52 ではありません)。
私の目標は、レシピ テーブル内の 5 つのレシピ名のうち 3 つを返すことです (関連する materials.name に肉が含まれているものを差し引きます)。