2012-07-25 6 views
4

J'ai une base de données qui a un tableau des ingrédients I et un tableau des recettes R. Les deux tables ont une relation plusieurs-à-plusieurs, comme une recette utilise beaucoup ingrédients et un ingrédient est utilisé dans de nombreuses recettes. J'ai une troisième table de référence croisée qui utilise le cross-reference validation pattern pour appliquer ma relation many-to-many, et est faite en utilisant des clés étrangères (au lieu d'entiers).Requête SQL pour les recettes qui peuvent être faites à partir de la collection d'ingrédients

En supposant que j'ai une collection d'ingrédients C en dehors de ma base de données, comment puis-je interroger la table de recettes R pour chaque recette qui peut être faite en utilisant SEULEMENT la liste des ingrédients fournis en C?

Autres choses à considérer

1) vitesse (bien sûr) être une préoccupation à terme, mais la justesse est ce que je suis coincé sur le moment.

2) La collection d'ingrédients C peut être très grande (~ 100 ingrédients).

Des réponses ou même simplement des pointeurs dans la bonne direction seraient grandement appréciés.

Merci,

Alec

+1

Qu'est ce que le DB/Version? – Chandu

+0

@Chandu, je n'ai pas encore compris tout ça, je travaille sur ce système comme un passe-temps, donc je n'ai pas encore défini de spécifications. Pour l'instant, vous pouvez simplement supposer que MySQL 5.5.25 est stable. Mais vraiment, toute réponse que vous pouvez fournir, je vais essayer de revenir à MySQL (ou tout autre DB que je décide d'utiliser) – pghprogrammer4

Répondre

5

Une façon est d'écrire:

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

C'est: commencer par C. Sélectionnez toutes les recettes – références croisées d'ingrédients où l'ingrédient est pas dans C. Cela vous donne l'ensemble de toutes les recettes que ne peut pas faire en utilisant uniquement des ingrédients dans C. Ensuite, sélectionnez toutes les recettes qui ne sont pas dans cet ensemble.

+0

Bonne prise sur ma réponse. J'ai lu la question à jeûner. J'ai manqué le point sur seulement des recettes qui peuvent être faites avec SEULEMENT ces ingrédients. – RThomas

Questions connexes