2017-10-12 3 views
1

Ich habe eine Rezept-Datenbank. Aber wee Bedarf an nur 3 Tische aussehen:Wählen Sie die richtigen Daten, wenn DB komplexe PK-Tabelle

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


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

[Ingredient] 
ID (PK) 
Name 
Units 

Deshalb möchte ich Tisch bekommen für eine bestimmte Rezeptname, die

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

Meine Frage ist

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

wie

sieht aber was Ich bekomme ist

[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. 

Wie kann ich dieses Problem lösen?

+0

Hinweis: 'JOIN'. Und * nix * verwende Kommas in der 'FROM'-Klausel. –

Antwort

2

Diese Abfrage:

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

Heiliger Jesus! Das funktioniert so, wie ich es wollte. Vielen Dank! – Mex

0

Versuchen Sie die folgende Abfrage:

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); 

Die obige Abfrage gibt den Namen eines bestimmten Rezepts und Details der Zutaten für das jeweilige Rezept, one-by-one .

Hoffe es hilft!

Verwandte Themen