2017-01-31 9 views
0

私は簡単なテーブル構造を持っていますが、適切なSQLクエリを理解するのが難しいです。指定されたリストのSQLのスーパーセット

テーブルの構造:

Recipe  { id (pk), name, description, ... } 
Ingredient { recipe_id (fk), ingredient } 

私が言うにはSQLを把握しようとしている..「食材のリストを考えると、指定された成分の少なくともすべてを持っているレシピを返す」

(別の言い方をすると、指定された成分は、対応するレシピの成分のスーパーセットです)

EDIT:IngredientテーブルではなくSELECT r.* FROM Recipe rを実行できますか?

+0

どのように成分のリストをクエリに渡しますか? –

+0

'WHERE IN IN( 'Flour'、 'Sugar') ' –

答えて

2

group byと集約でこれを行うことができます。 1つの方法は次のとおりです。

select i.recipe_id 
from ingredients i 
where i.ingredient in (<ingredient 1>, <ingredient 2>, . . .) 
group by i.recipe_id 
having count(distinct i.ingredient) = <number of ingredients you are looking for>; 
+0

' SELECT r FROM Recipe r'は可能ですか? –

+0

MySQLではありません。これは有効な構文ではありません( 'r。*'は 'rが' Recipe'の列ではないと仮定して有効です)。 –

+0

ありがとう - 明確にするために、FROM Ingredientテーブルを選択するのではなく、選択したFROM Recipeテーブルを実行することが可能かどうかを尋ねています。 –