2012-07-25 37 views
4

我有一個有配料表I和食譜R表的數據庫。這兩個表具有多對多的關係,因爲一個食譜使用多個成分和一種成分用於許多食譜。我有第三個交叉引用表,它使用cross-reference validation pattern執行我的多對多關係,並使用字符串外鍵(而不是整數)完成。可以從配料集合中製作食譜的SQL查詢

假設我有一個C數據庫以外的成分C集合,我如何查詢每個配方的配方表R?只能使用C中提供的成分列表進行配方?

其他的事情要考慮

1)速度(當然)是一個問題,最終,但是正確性就是我此刻停留在。

2)成分C的集合可能非常大(約100種成分)。

任何答案,甚至只是在正確的方向指針將不勝感激。

感謝,

亞歷克

+1

什麼是數據庫/版本? – Chandu 2012-07-25 21:15:53

+0

@Chandu,我還沒有想出任何這方面的內容,我只是將這個系統作爲一項業餘愛好,所以我還沒有制定任何規範。目前,你可以假設當前穩定的MySQL 5.5.25。但真的,任何你可以提供的答案我都會嘗試回到MySQL(或者我決定使用的任何數據庫) – pghprogrammer4 2012-07-25 21:51:53

回答

5

一種方法是這樣寫:

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中的配料。然後,選擇不在該組中的所有配方。

+0

我的回答很好。我快速閱讀這個問題。我錯過了關於只有這些配料才能製作的食譜的觀點。 – RThomas 2012-07-25 21:27:24