液体を分配するアプリケーションに取り組んでいます。DBの編成はこちら
キャニスター:
- canister_id{PK}
- 成分ID{FK}
成分:
- 成分ID{PK}
- 成分名
飲む:
- ドリンクID{PK}
- 飲み物の名前
成分のインスタンス:
- インスタンス ID{PK}
- ドリンクID{FK}
- 成分ID{FK}
- 額
各ドリンクには複数の成分 (成分インスタンス テーブルに保持されます) がありますが、キャニスターは 12 個しかありません。現在キャニスターに必要なすべての成分が入っているすべての飲み物を収集する SQL コマンドを作成しようとしています。
これまでのところ、これは私が持っているものです。
SELECT DISTINCT Drink.drink_name
FROM Drink, ingredientInstance, Canister
WHERE (((ingredientInstance.drink_id)=[Drink].[drink_id])
AND ((ingredientInstance.ingredient_id)
IN (select ingredient_id FROM Canister)));
ただし、これは、1 つの成分でも利用可能なすべての飲み物を返します。私が探しているのは、componentInstance に関連付けられているすべての成分が現在キャニスターに入っていることを確認する方法です。
たとえば、drink1には独自の成分1と成分2が必要だとします。これらの成分 ID の両方がキャニスターに存在する場合は結果に表示されますが、キャニスターに成分が 1 つまたは 0 つしかない場合は表示されません。
当然のことだと思いますが、これを行う方法が思いつきません。