-1

如果我有一个可以被视为食谱数据库的数据库,我如何选择我可以用给定成分制作的食谱的所有 id,例如,如果我有成分 1 和 4,它将返回 3,因为这是唯一的我可以用它做的食谱。

将有大约 50 种成分和更多食谱。

我看到了几种可能性,比如使用 UNION/几个连接,......但我没有看到一个简单的简单解决方案来解决这个问题。

Recipes   Recipes/Ingredients    Ingredients
   1            1  1                  1
   2            1  2                  2
   3            2  1                  3
                2  3                  4
                2  4
                3  1
                3  4

编辑/

我想解决它的方法:

select recipe_id from Recipes
where recipe_id in ( 
    select recipe_id from Recipes_Ingredients where ingredient_Id = 1
    UNION
    select recipe_id from Recipes_Ingredients where ingredient_Id = 4
)

这将导致很长的查询,因为我的数据库实际上并不是关于成分,而是关于其中可以包含 50 种或更多这些东西的东西。

4

2 回答 2

2

试试这个(我试图猜测你的列名):

表食谱:Recipe_id

表Recipes_Ingredients:食谱| 原料

  SELECT Recipe_id FROM Recipes   
  EXCEPT (
    SELECT DISTINCT Recipes FROM Recipes_Ingredients
    WHERE Ingredients NOT IN (1,4)  
  )

我将解释这一点。如果您想知道“您拥有至少一种成分的食谱”(此处:1,4):

SELECT DISTINCT Recipes FROM Recipes_Ingredients
WHERE Ingredients IN (1,4)

所以相反的是“我不能做哪个食谱”,因为你至少错过了一种成分:

SELECT DISTINCT Recipes FROM Recipes_Ingredients
WHERE Ingredients NOT IN (1,4)  

然后我们采取所有食谱,除了你不能做的食谱:

SELECT recipe_id FROM Recipes   
  EXCEPT (
    SELECT DISTINCT Recipes FROM Recipes_Ingredients
    WHERE Ingredients NOT IN (1,4)  
  )
于 2013-03-13T14:30:19.877 回答
1

尝试:

select recipe_id
from recipes_ingredients
group by recipe_id
having count(*)=sum(case when ingredient_id in (1,4) then 1 end)
于 2013-03-13T14:39:11.907 回答