2017-02-21 45 views
-1

我有兩個表通過關聯錶鏈接多對多關係。如何查詢mySQL中的多對多數據庫?

這個想法是搜索一個或多個配料,返回一個或多個食譜,而不返回同一食譜的倍數。

Recipe_Table Recipe_ID Recipe_Name

Ingredients_Table Ingredients_Table Ingredient_ID Ingredient_Name

Associative_Table Ingredient_ID(FK) Recipe_ID(FK)

查詢我有如下:

SELECT r.recipe_name, i.ingredient_name, ri.amount FROM recipes r 
INNER JOIN recipes_ingredients ri on r.recipe_id = ri.recipe_id 
INNER JOIN ingredients i on ri.ingredient_id = i.ingredient_id 
WHERE i.ingredient_name IN ('eggs', 'flour'); 

這工作不錯,但相同的配方的回報倍數,例如,如果我查詢「蛋」和「麪粉」,它返回煎餅兩次,而我只希望它匹配一次。

Picture of the associative table linking each ingredient_id to a recipe_id and each recipe_id to ingredient_ids with a unique amount for each combination..

+0

發佈樣本數據和預期結果。在這樣做的時候,你可能會明白,你不需要任何其他的結果。 –

+0

爲每種原料返回配方似乎是合理的。你期望會發生什麼? – Strawberry

回答

0

你需要Recipe_ID在最後查詢的添加組。

+0

恐怕OP會高興地接受這個錯誤的答案,並且稍後再回來請求幫助來調試該代碼。 –

+0

我不明白你的意思,但如果回覆是錯誤的,你可以編輯它。 –

+0

沒有什麼可以編輯的。對於一個毫無意義的問題,沒有正確的答案。如果你不知道它所屬的成分,那麼「ri.amount」的含義是什麼? –

0

那麼,多對多可能會被分成兩個1-man-24的方向。

贊,食譜有 Ingerdients。或這1 Ingerdient用於那很多食譜。

現在,這取決於您現在要走哪個方向:您是否試圖確定在哪些食譜中使用了特定的成分? 或者你是否打算選擇配方食譜列表的記錄?

知道了,你可以正確地分組/清除/聚合。

那麼你在幹什麼?

+0

是的,我正在嘗試確定在哪些食譜中使用了特定的成分。 –

+0

那麼你的「煎餅」字段至少暴露了兩次,這是100%自然的。你有('煎餅','麪粉','1磅')和('煎餅','雞蛋','2') - 這是完全合法的,而這正是你所要求的。 我真的不明白你有什麼困惑嗎? –