我正在尝试确定客户是否购买了产品,而不是特定产品。
我的数据库包含2个我们需要引用的表-tblOrders和tblOrderItems
tblOrders
OrderID, FirstName, LastName, Email
tblOrderItems
OrderItemID, OrderID, ProductID
tblOrders可以具有一个或多个给客户的特定订单。这将基于单个人的多个订单的电子邮件。每个订单可以有一个或多个订单项。这些是与订单相关的产品。它们由OrderID连接。 ProductID将加入到tblProducts中,但是对于这个问题,我们只能在tblOrderItems中引用ProductID。
基本上,假设我正在寻找从未购买过“帽子”的人。我们出售裤子,衬衫和帽子。
约翰尼B在1月份买了一条裤子,在2月份买了一件衬衫,所以我需要他的唱片表现为从来没有买帽子。
Janie C在1月份购买了一条裤子,2月份购买了帽子,3月份购买了衬衫。她不应该得出结果。
Bill W.以单笔订单(多件商品)购买了一条裤子和一件衬衫,所以我需要他的记录显示从未购买帽子。
我可以使用一个订单处理多个项目,但是过去我遇到了多个订单问题。我基本上希望获得从未购买帽子的独特电子邮件(按分组)。
答案 0 :(得分:1)
“我基本上希望获得从未购买过帽子的独特电子邮件(按分组)。”
只需将其转换为查询
select o.emailid
from tblOrders o
join tblOrderItems oi
on o.orderid=oi.orderid
group by o.emailid
having count(case when oi.productid=<product_id_of_hat> then 1 end)=0