Return 只有包含所有成分的食谱 Sql
Return only recipes that contains all ingredients Sql
我有这 3 个 table:
饮料
- drink_id
- 姓名
成分
- ingredient_id
- 姓名
Opskrifter
- drink_id
- ingredient_id
- 数量
Drinks
和 Ingredients
在 opskrifter
中交叉引用。
我想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;
您可以使用 join
、in
、exists
——无论怎样——从 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)
我有这 3 个 table:
饮料
- drink_id
- 姓名
成分
- ingredient_id
- 姓名
Opskrifter
- drink_id
- ingredient_id
- 数量
Drinks
和 Ingredients
在 opskrifter
中交叉引用。
我想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;
您可以使用 join
、in
、exists
——无论怎样——从 drinks
.
I want to return all recipies from
opskrifter
that has ingredients from another table calledstock
.
我了解到您想要含有 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)