我有3张桌子:
customer_order行包含一个客户和该客户在该订单中购买的产品。
现在,对于管理系统,我必须输入产品列表,并找到已购买所有这些产品(包括)的客户列表。包容性是指所有被过滤的客户都必须购买了所有产品。
注意事项:
在mysql中,我使用customer_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;
此处product_id的数目是可变的:prod_id1,prod_id2,prod_id3等。在temp.prodcount= 2
中,“ 2”是作为输入的乘积。
在通过输入产品列表(where子句)过滤订单后,我正在计算customer_order表中客户购买的产品的不同数量。然后将计数与输入的产品数量进行比较。如果它们相等,则表示这是购买了所有输入产品的客户
我不确定这是否是正确的方法,因为它看起来更像是黑客。此外,我需要用JPQL编写。因此,JPQL解决方案将有所帮助。
答案 0 :(得分:2)
您的方法很好,但是您可以通过删除子查询并使用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;