まず第一に、外側のクエリが必要ないため、クエリを大幅に簡素化できます。以下はまったく同じです。
SELECT r.recipeTitle AS recipe
FROM recipeIng il, Ingredient i, Recipe r
WHERE (il.ingredientID = i.ingredientID)
AND (il.recipeID = r.recipeID)
AND (i.ING LIKE '%cheese%' AND i.ING LIKE '%salmon%')
第二に、これらすべてのブラケットは必要ありません。
SELECT r.recipeTitle AS recipe
FROM recipeIng il, Ingredient i, Recipe r
WHERE il.ingredientID = i.ingredientID
AND il.recipeID = r.recipeID
AND i.ING LIKE '%cheese%'
AND i.ING LIKE '%salmon%'
第三に、テーブル間の関係をより明確にするために、テーブルを内部結合する必要があります。
SELECT r.recipeTitle AS recipe
FROM recipeIng il JOIN
Ingredient i ON il.ingredientID = i.ingredientID JOIN
Recipe r ON il.recipeID = r.recipeID
WHERE i.ING LIKE '%cheese%'
AND i.ING LIKE '%salmon%'
この時点で、問題は明確になっているはずです。2 つの可能性があり、2 つは 1 つよりも可能性が高いです。
1)ING
フィールドは、レシピのすべての材料を 1 つのフィールドに格納します。この場合、材料にチーズとサーモンの両方が必要なレシピはありません。
2) あなたのING
フィールドには、行ごとに 1 つの成分しか保存されません。Cheese
ただし、 と の両方を含む単一の行を求めていますSalmon
。これはあなたの意図ではないため、クエリは間違っています。
-- SELECT ALL RECIPES USING CHEESE *OR* SALMON
SELECT r.recipeTitle AS recipe
FROM recipeIng il JOIN
Ingredient i ON il.ingredientID = i.ingredientID JOIN
Recipe r ON il.recipeID = r.recipeID
WHERE i.ING LIKE '%cheese%'
AND i.ING LIKE '%salmon%'
-- SELECT ALL RECIPES USING CHEESE *AND* SALMON
SELECT r.recipeTitle AS recipe
FROM recipeIng il JOIN
Ingredient iCheese
ON il.ingredientID = i.ingredientID
AND i.ING LIKE '%cheese%' JOIN
Ingredient iSalmon
ON il.ingredientID = i.ingredientID
AND i.ING LIKE '%salmon%' JOIN
Recipe r ON il.recipeID = r.recipeID
上記は単なる例であることに注意してください-スキーマを知らなくても、これらは単なるヒントと提案です:)