有一家咖啡店出售饮料.每杯售出的饮料将被分配一个唯一的ID.
假设咖啡店的所有顾客都有商店的会员ID(所有这些都是唯一的).
商店的饮料可分为两种类型:咖啡或茶.
现在我有4张桌子.
成员(memberID,memberName)
饮料(bID,customerID)(引用Member.memberID的customerID)< - 每个售出的杯子都有一个饮料实体.
咖啡(coffeeName,bID)(参考Beverage.bID的bID)
茶(teaName,bID)(参考Beverage.bID的bID)
茶和咖啡是饮料的亚型.
每个成员也可以多次购买不同的饮料.
找到可以显示已购买两种饮料的所有成员的SQL查询(即不计算仅购买一种饮料的成员).
我已经考虑过这个问题大约半天了......希望有人可以帮助我.
select
memberID
from
Member
where
memberID IN (select customerID
from Beverage inner join Coffee on Beverage.bID = Coffee.bID)
AND
memberID IN (select customerID
from Beverage inner join Tea on Beverage.bID = Tea.bID)
Run Code Online (Sandbox Code Playgroud)
或使用EXISTS
select
memberID
from
Member
where
exists (select *
from Beverage inner join Coffee on Beverage.bID = Coffee.bID
where Beverage.customerID = Member.memberID)
AND
exists (select *
from Beverage inner join Tea on Beverage.bID = Tea.bID
where Beverage.customerID = Member.memberID)
Run Code Online (Sandbox Code Playgroud)
根据数据集,EXISTS变体可能更快.假设存在必要的索引,这将允许优化器在评估存在检查时快捷方式.