我有这 3 个表:
饮料
成分
Opskrifter
Drinks
和 Ingredients
在 opskrifter
中交叉引用。
我想返回来自 opskrifter
的所有食谱,这些食谱的成分来自另一个名为
库存
所以要制作杜松子酒和滋补品,我需要库存杜松子酒和滋补品。
如果我只有可乐和滋补品,我应该什么都不退货
这是我到目前为止所得到的,从其他帖子复制/粘贴,但不能再进一步了。
Select
d.*
From
drinks d
Where
not exists (select 1
from opskrifter r
where r.drink_id = d.drink_id
and r.ingredient_id in (1, 2, 3))
请帮忙:-)
答案 0 :(得分:3)
您可以使用聚合:
select o.drink_id
from opskrifter o
where r.ingredient_id in (1, 2, 3)
group by o.drink_id
having count(*) = 3;
您可以使用 join
、in
、exists
——随便——从 drinks
中引入整行。
答案 1 :(得分:1)
我想返回来自 opskrifter
的所有食谱,这些食谱的成分来自另一个名为 stock
的表。
我了解您想要的饮品包含 stock
表中列出的所有成分。假设您在 ingredient_id
中有一个名为 stock
的列,您可以将其表述为:
select o.drink_id
from opskrifter o
inner join stock s on s.ingredient_id = o.ingredient_id
group by o.drink_id
having count(*) = (select count(*) from stock)
或者,如果您想要所有成分都在 stock
中可用的饮料:
select o.drink_id
from opskrifter o
left join stock s on s.ingredient_id = o.ingredient_id
group by o.drink_id
having count(*) = count(s.ingredient_id)