Mysql找到购买了X但没有购买Y

时间:2018-12-02 18:17:47

标签: mysql sql database

我正在尝试确定客户是否购买了产品,而不是特定产品。

我的数据库包含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.以单笔订单(多件商品)购买了一条裤子和一件衬衫,所以我需要他的记录显示从未购买帽子。

我可以使用一个订单处理多个项目,但是过去我遇到了多个订单问题。我基本上希望获得从未购买帽子的独特电子邮件(按分组)。

1 个答案:

答案 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