如何形成以下结果的sql查询?

时间:2018-10-05 11:26:29

标签: mysql sql postgresql join subquery

Schema

这是一个示例架构,可用于获得我的结果。

在这里,客户-购买历史为1:N关系。习俗可以购买n次。

PurchaseHistory-产品1:1关系。每次购买仅包含一种产品。

所需结果:

显示同时购买了Product1和product2或仅购买了product3的客户。

样本数据:

客户

customer table

购买历史:

purchase History

产品1

product1

产品2 product2

预期答案:客户c2,因为他已经购买了product1和product2。

2 个答案:

答案 0 :(得分:0)

我为您写了一个查询。未使用实际数据进行测试。但是我已经写了你的要求。试一试并进行一些更改,然后在mysql控制台上尝试一下。看看是否可以达到您想要的结果。

select c.name from purchasehistory ph
left join customer c on ph.customerid = c.customer_id
join product1 p1 on ph.purchase_id = p1.purchase_id
join product2 p2 on ph.purchase_id = p2.purchase_id
join prodcut3 p3 on ph.purchase_id = p3.purchase_id
where (p1.purchase_id is not null and p2.purchase_id is not null) 
or p3.purchase_id is not null

答案 1 :(得分:0)

Select customer_id from purchasehistory t
Where (t.purchese_id in (select purchese_id from product1) 
And t.purchese_id in (t.purchese_id in (select purchese_id from product2))
Or t.purchese_id in (t.purchese_id in (select purchese_id from product1)

这将起作用,尽管您的表方案应该更改,但您不希望每个产品都有一个表,它可以在3种产品(而不是100种)中使用。