Return 只有包含所有成分的食谱 ​​Sql

Return only recipes that contains all ingredients Sql

我有这 3 个 table:

饮料

成分

Opskrifter

DrinksIngredientsopskrifter 中交叉引用。

我想return opskrifter 中所有含有另一个 table 成分的食谱 ​​

股票

所以要制作杜松子酒和奎宁水,我需要有库存的杜松子酒和奎宁水。

如果我只有可乐和奎宁水,我应该return什么都没有

这是我目前从其他 post 那里得到的 copy/pasted,但不能再进一步了。

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))

请帮忙:-)

您可以使用聚合:

select o.drink_id
from opskrifter o
where r.ingredient_id in (1, 2, 3)
group by o.drink_id
having count(*) = 3;

您可以使用 joininexists——无论怎样——从 drinks.

引入整行

I want to return all recipies from opskrifter that has ingredients from another table called stock.

我了解到您想要含有 stock table 中所列所有成分的饮品。假设您在 stock 中有一个名为 ingredient_id 的列,您可以将其表述为:

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)