4

Ingredients I のテーブルと Recipes R のテーブルを含むデータベースがあります。1 つのレシピが多くの材料を使用し、1 つの材料が多くのレシピで使用されるため、2 つのテーブルには多対多の関係があります。相互参照検証パターンを使用して多対多の関係を強制する 3 番目の相互参照テーブルがあり、 (整数の代わりに) 文字列外部キーを使用して行われます。

データベース外に材料 C のコレクションがあると仮定すると、C で提供された材料のリストのみを使用して作成できるすべてのレシピについて、レシピ テーブル R をクエリするにはどうすればよいでしょうか?

その他の考慮事項

1) 速度は (もちろん) 最終的には問題になりますが、現時点では正確性にこだわっています。

2) 成分 C のコレクションは非常に大きくなる可能性があります (約 100 成分)。

正しい方向への答えや単なる指針さえあれば、大歓迎です。

ありがとう、

アレック

4

1 に答える 1

5

1 つの方法は、次のように書くことです。

select ...
  from R
 where ID not in
        ( select R_ID
            from RI
           where I_ID not in
                  ( select I_ID
                      from C
                  )
        )
;

つまり、 から始めCます。材料が含まれていないレシピと材料の相互参照をすべて選択しCます。の材料だけでは作れなかったレシピのセットですC。次に、そのセットにないすべてのレシピを選択します。

于 2012-07-25T21:21:47.550 に答える