2017-10-12 1 views
1

J'ai une base de données de recettes. Mais petit besoin de regarder seulement 3 tables:Sélectionner les données correctes lorsque la base de données comporte une table PK complexe

[Recipe] 
ID (PK) 
Name 
<...> 


[RecipeIngredient] 
IDRecipe 
IDIngred 
Quantity 
(IDRecipe, IDIngred) - PK 

[Ingredient] 
ID (PK) 
Name 
Units 

Je veux obtenir une table pour un certain nom de la recette qui ressemble à

[Name] [Quantity] [Units] 
ingr1  50   gr. 
ingr2  100   ml. 
ingr3  1   kg. 

Ma requête est

SELECT [Name], [Quantity], [Units] FROM [Ingredient], [RecipeIngredient] 
WHERE [ID] = ANY 
    (SELECT [IDIngred] FROM [RecipeIngredient] WHERE [IDRecipe] = 
    (SELECT [ID] FROM [Recipe] WHERE [Name] = 'RecipeName1')); 

Mais ce Je reçois est

[Name] [Quantity] [Units] 
ingr1  50   gr. 
ingr1  100   ml. 
ingr1  1   kg. 
ingr2  50   gr. 
ingr2  100   ml. 
ingr2  1   kg. 
ingr3  50   gr. 
ingr3  100   ml. 
ingr3  1   kg. 

Comment puis-je résoudre ce problème?

+0

Indice: 'JOIN'. Et * jamais * utiliser des virgules dans la clause 'FROM'. –

Répondre

2

Essayez cette requête:

SELECT I.[Name], RI.[Quantity], I.[Units] 
    FROM [RecipeIngredient] AS RI 
     LEFT JOIN [Recipe] AS R ON R.ID = RI.IDRecipe 
     LEFT JOIN [Ingredient] AS I ON I.ID = RI.IDIngred 
    WHERE R.Name = 'someRecipeName' 
+0

Saint Jésus! Cela fonctionne comme je le voulais. Merci beaucoup! – Mex

0

Essayez la requête suivante:

SELECT Rec.Name, Ing.Name, Quantity, Units 
FROM Ingredient Ing 
Inner Join RecipeIngredient Ri 
on Ri.IDIngred = Ing.ID 
Inner Join Recipe Rec 
on Rec.ID = Ri.IDRecipe 
WHERE Rec.ID IN 
      (Select distinct ID from Recipe); 

La requête ci-dessus renvoie le nom de recette particulière et les détails des ingrédients pour cette recette particulière, un par un .

J'espère que ça aide!