![]() |
|
|
#1 (permalink) |
|
Upright
|
[SQL]How to select based on many-to-many relationship.
I'm embarrassed to ask this, but I have limited SQL experience.
I have a many to many relationship, and I need to select rows in one table based on more than one value in the other table. For example if you have a recipe table, an ingredient table, and an intersection relation then what would you need to do select all recipes based on two or more ingredients? So the tables would be: RECIPE(RecipeID, RecipeName) INGREDIENT(IngredientID,IngredientName) RECIPEINGREDIENT(IngredientID, RecipeID) |
|
|
|
|
#2 (permalink) |
|
Fluxing wildly...
Location: Auckland, New Zealand
|
Wow... I just can't figure this one out O_o
Something using a subquery maybe?
__________________
flux (n.) Medicine. The discharge of large quantities of fluid material from the body, especially the discharge of watery feces from the intestines. |
|
|
|
|
#3 (permalink) |
|
Insane
Location: Wales, UK, Europe, Earth, Milky Way, Universe
|
Please note this is totally untested but it seems logical to me and should be syntactically correct. Its worth a try anyway. SQL gurus reading this may have a more efficient way to do it too, i'm far from an expert. Anyway, here goes:
Code:
SELECT * FROM RECIPE WHERE RECIPEINGREDIENT.RecipeID = RECIPE.RecipeID AND RECIPEINGREDIENT.IngredientID = INGREDIENT.IngredientID AND (INGREDIENT.IngredientName LIKE 'Eggs' OR INGREDIENT.IngredientName LIKE 'Bacon'); Worth a try welshbyte
__________________
There are only two industries that refer to their customers as "users". - Edward Tufte |
|
|
|
|
#5 (permalink) |
|
Tilted
|
Use EXISTS checks. Eg:
Code:
SELECT RecipeName
FROM Recipe
WHERE EXISTS (
SELECT *
FROM RecipeIngredient
WHERE RecipeIngredient.RecipeID = Recipe.RecipeID
AND RecipeIngredit.IngredientID = <Ingredient1ID>
) AND EXISTS (
SELECT *
FROM RecipeIngredient
WHERE RecipeIngredient.RecipeID = Recipe.RecipeID
AND RecipeIngredit.IngredientID = <Ingredient2ID>
) ...etc
|
|
|
|
|
#6 (permalink) |
|
Upright
Location: Melbourne, Australia
|
Another way of doing this is to do:
Code:
SELECT RecipeName
FROM Recipe
INNER JOIN RecipeIngredient AS Ingredient1 ON
(Ingredient1.RecipeID = Recipe.RecipeID)
INNER JOIN RecipeIngredient AS Ingredient2 ON
(Ingredient2.RecipeID = Recipe.RecipeID)
WHERE
(Ingredient1.IngredientID = <IngredientID1>)
AND (Ingredient2.IngredientID = <IngredientID2>)
|
|
|
| Tags |
| based, manytomany, relationship, select, sqlhow |
|
|