请求SQL查询对我来说非常困难

dan*_*ail 1 sql

有一家咖啡店出售饮料.杯售出的饮料将被分配一个唯一的ID.

假设咖啡店的所有顾客都有商店的会员ID(所有这些都是唯一的).

商店的饮料可分为两种类型:咖啡或茶.

现在我有4张桌子.

  • 成员(memberID,memberName)

  • 饮料(bID,customerID)(引用Member.memberID的customerID)< - 每个售出的杯子都有一个饮料实体.

  • 咖啡(coffeeName,bID)(参考Beverage.bID的bID)

  • 茶(teaName,bID)(参考Beverage.bID的bID)

茶和咖啡是饮料的亚型.

每个成员也可以多次购买不同的饮料.

找到可以显示已购买两种饮料的所有成员的SQL查询(即不计算仅购买一种饮料的成员).

我已经考虑过这个问题大约半天了......希望有人可以帮助我.

njr*_*101 7

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变体可能更快.假设存在必要的索引,这将允许优化器在评估存在检查时快捷方式.