根据客户购买的产品筛选客户

cld4siwp  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(339)

我有三张table:
客户(pk:customer\u id)
客户订单(pk:订单id,fk:客户id,产品id)
产品(主键:产品id)
客户订单行包含客户和客户在该订单中购买的产品。
现在对于一个管理系统,我必须输入一个产品列表,并找到购买了所有这些产品(包括)的客户列表。我的意思是,所有被过滤的顾客一定都买了所有的产品。
注意事项:
每一位顾客都可能买了更多的产品(输入产品列表(可以是子集)
作为输入发送的产品数量可能会有所不同
我试着用jpql写。
在mysql中,我在customer\u order表中使用了如下内容:

select customer_id from  (SELECT count(distinct (product_id)) as prodcount, customer_id FROM customer_order where product_id = :prod_id1 or product_id = :prod_id2 group by customer_id) as temp where temp.prodcount= 2;

这里产品id的编号是可变的:prod\u id1、prod\u id2、prod\u id3等等。在 temp.prodcount= 2 ,'2'是作为输入的产品数。
在按输入产品列表(where子句)过滤订单之后,我从customer\ order表中计算客户购买的产品的不同数量。然后将计数与输入的产品数量进行比较。如果他们是平等的,这意味着这是谁的客户购买了所有的产品是投入
我不确定这是正确的方式做这件事,因为它似乎更像一个黑客。此外,我需要用jpql编写。所以jpql解决方案会很有帮助。

kx5bkwkv

kx5bkwkv1#

您的方法很好,但是您可以通过删除子查询并使用 in :

select co.customer_id 
from customer_order co
where co.product_id in (:prod_id1, :prod_id2)
group by co.customer_id
having count(distinct product_id) = 2;

相关问题