我有三张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解决方案会很有帮助。
1条答案
按热度按时间kx5bkwkv1#
您的方法很好,但是您可以通过删除子查询并使用
in
: