「まずいリキュールを美味しいリキュールに変える」別名「ミックスカクテル」という新しい趣味を持っています。
私はオタクなので、本でレシピを調べたくないので、材料リストを読んで、足りないものがいくつかあることに気付きます. 代わりに、収集したすべてのレシピと材料を含むデータベースを作成し、コンピューターに、現在家にある材料で「作成」できるレシピを教えてもらいたい. この目的のために、私はこの2つのテーブルを持っています:
表 1: 多対多の関係に関する情報を保持します
recipe | ingredient
1 | 1
1 | 2
1 | 3
2 | 1
2 | 4
表 2: この成分が入手可能かどうかの情報
ingredient | available
1 | true
2 | true
3 | true
4 | false
他のすべてのテーブルは、私の問題にとって興味深いものではありません。
これらの 2 つのテーブルは、次のような 1 つの大きなテーブルに簡単に変換できますINNER JOIN
。ingredient = ingredients.id
recipe | ingredient | available
1 | 1 | true
1 | 2 | true
1 | 3 | true
2 | 1 | true
2 | 4 | false
これを見ると、レシピ 1 は混ぜることができますが、材料が 1 つ不足しているため、レシピ 2 を混ぜることができないことがわかります。
私が今やりたいことは、結果が次のようになる方法を見つけることです。
recipe | all_available
1 | true
2 | false
特定のレシピのすべての材料が利用可能かどうかを確認する方法をすでに見つけました。
SELECT RtI.recipe, BIT_AND(ingredients.available) AS all_available
FROM RtI
INNER JOIN ingredients ON (ingredients.id = RtI.ingredient)
WHERE RtI.recipe = 1
結果:
recipe | all_available
1 | true
しかし、特定の ID を検索する必要があります。私が欲しいのは、「このレシピですべての材料が利用可能かどうかを表示する」ではなく、「すべての材料が利用可能なすべてのレシピを表示する」ことです。
MySQLクエリを使用するだけでこれを達成する方法はありますか?