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

Mysql 如何为以下结果形成sql查询?,mysql,sql,postgresql,join,subquery,Mysql,Sql,Postgresql,Join,Subquery,这是一个示例模式,可用于获得我的结果 在这里,客户购买历史是1:N关系。一个客户可以有n次购买 PurchaseHistory-产品1:1关系。每次购买仅包含一种产品 预期结果: 显示同时购买了产品1和产品2或仅购买了产品3的客户 样本数据: 顾客 采购历史记录: 产品1 产品2 预期答案:客户c2,因为他同时购买了产品1和产品2。我为您写了一个查询。它没有用实际数据进行测试。但我已经写了你的要求。使用并进行一些更改,然后在mysql控制台上试用。看看你是否能达到你想要的结果 select c

这是一个示例模式,可用于获得我的结果

在这里,客户购买历史是1:N关系。一个客户可以有n次购买

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

预期结果:

显示同时购买了产品1和产品2或仅购买了产品3的客户

样本数据:

顾客

采购历史记录:

产品1

产品2


预期答案:客户c2,因为他同时购买了产品1和产品2。

我为您写了一个查询。它没有用实际数据进行测试。但我已经写了你的要求。使用并进行一些更改,然后在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

这将起作用,尽管您的表方案应该改变,但您不希望每个产品都有一个表,它适用于3种产品,而不是100种产品。

您使用的是MySQL还是Postgresql?这里的大多数人想要格式化的文本,而不是图像或图像链接。”,产品1、2和3真的是表还是表产品的示例元组?在后一种情况下,只需左键连接这3个表,然后添加where条件检查空值即可实现目标。product1、2和3的连接应为左键连接,否则意味着p1.purchase\u id和p2,p3也始终不为空。这不起作用,因为每一行的采购历史记录将只与三个产品表中的一行匹配。所以每一行只包含三个product表中的一个表项,应用where子句是行不通的。由于我不能在这里发布这个,我试图设计一个解决我的查询的示例。我的问题是,我将有一个公开的主模块。在主模块中将有子模块。我需要在每个子模块上应用过滤器,并在逻辑上组合这些过滤器以从主模块获取记录。我需要一些模板查询,这样我就可以为所有这类关系构造。@AravindAshok在高级过滤器上-我建议将所有这些“产品”合并到一个查询中,并将该查询与您的主数据合并。在基本过滤器上,我会使用in方法,就像我在示例中显示的那样。是的,这就是问题所在。如果我加入所有表,在这种情况下,每个客户行都有多个购买历史记录行。然后我将这个结果与每个产品表连接起来,在每个产品上应用一些过滤器作为连接条件。现在,每一行只有三种产品中的一种产品的详细信息。我想知道如何根据上述条件只过滤客户。
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)