[英]Database Selecting Multiple Rows Based on Multiple Values
我正在设计一个数据库来存储鸡尾酒名称及其成分。 该数据库具有以下结构。
Drinks
ID NAME IMGURL
1 A http://
2 B http://
3 C http://
Ingredients
ID NAME
1 Water
2 SugarSyrup
3 Rum
4 Vodka
5 Gin
6 Tonic
7 Orange Juice
8 Whiskey
DRINKS_INGREDIENTS
ID DRINKSID INGREDIENTSID Quantity
1 1 1 30
2 1 4 90
3 1 6 60
4 2 8 30
5 2 1 30
6 2 2 30
7 2 3 10
8 2 4 30
9 3 5 60
10 3 6 60
Stocks
StockID IngredientID
1 5
2 6
我想,只选择DRINKS_INGREDIENTS表DRINKSIDs其中成分等于我们在stock.ex-如果我们只有在股票杜松子酒的那些话,就应该只返回DrinkID = 3,如果我们拥有所有的成分库存,则它将返回列表中的所有DrinkID。
我们还可以假设库存是无限的,因此不需要进行数量检查。
我正在使用sqlite数据库,但不确定如何编写查询以使其正常工作。
要查找可以按给定原料制成的饮料,可以在两个查询之间进行内部联接。 第一个将为您提供制作每种饮料所需的成分数量,第二个将为您提供每种饮料的库存成分数量。 通过加入关于Drinks.ID的查询并计数,您将获得具有库存所需所有成分的饮料。
该查询应执行您想要的操作:
select drinks.name from (
select d.NAME, di.DRINKSID, count(*) as cnt
from DRINKS_INGREDIENTS di
inner join Drinks d on d.ID = di.DRINKSID
group by d.name, di.DRINKSID
) drinks
inner join (
select di.DRINKSID, count(*) as cnt
from DRINKS_INGREDIENTS di
inner join stock s on di.INGREDIENTSID = s.IngredientID
group by di.DRINKSID
) stock
on drinks.DRINKSID = stock.DRINKSID
and drinks.cnt = stock.cnt;
修改它以考虑库存数量也很容易,只需将数量添加到库存表,然后在第二个查询中修改联接以包括s.quantity> = di.quantity。 请参阅此示例 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.