我想創建一個查詢,返回一組特定的寄存器,但我嘗試了幾種方法,它不工作。SQL查詢不清楚
我有像下面4個表:
recipe {
idRecipe integer,
name varchar(100)
}
recipeStep {
idStep integer,
idRecipe integer,
instruction varchar(100)
}
recipeIngredient {
idStep integer,
idIngredient integer
}
ingredient {
idIngredient integer,
name varchar(100)
}
- 配方可具有一個或多個步驟;
- 一步可以只有一個配方的一部分;
- 一步可以有一個或多個成分;
- 一種成分可以是一個或多個步驟的一部分;
該過濾器將返回包含用戶選擇的成分的所有配方。可以說我想要所有食譜含有所有食譜內涵成分68,25,36,109。於是,我來到了這一點:
SELECT r.*
FROM recipe r, recipeStep rs, recipeIngredient ri
WHERE r.idRecipe = rs.idRecipe
AND rs.idStep = ri.idStep
AND ri.idIngredient in (68,25,36,109)
的問題是,該查詢返回包含任何這些成分的所有配方,我只希望所有配方包含他們都做,這是
您顯示的查詢可能會返回每個食譜多次,因爲它有匹配的成分 - 所以你可以按食譜(id)分組,並計算不同的成分,看看它們是否足夠(在你的情況下是4)。 – jkavalik
@ jkavalik。我正要給相同的建議=) – Jacobian