我有这样的表格
OrderNo | item | price | customer
-----------------------------------
1 | itemA | 10 | customerA
2 | itemB | 20 | customerB
3 | itemC | 22 | customerC
1 | itemA | 10 | customerD
2 | itemD | 15 | customerD
4 | itemB | 20 | customerB
4 | itemD | 15 | customerB
我需要找到给定OrderNo
的常见List<Map<item,price>>
我编写了如下的查询。
案例1 :
Select OrderNo from table tl where item in ('itemB' ,'itemD') and price in ('20','15') GROUP By OrderNo Having count(OrderNo) > 1
评论:工作正常,提供2记录顺序No.2&amp; 4
案例2 :
Select OrderNo from table tl where item in ('itemB' ,'itemC') and price in ('20','22') GROUP By OrderNo Having count(OrderNo) > 1
评论:工作正常,提供0条记录
案例3 :
Select OrderNo from table tl where item in (itemA ,itemB) and price in (10,20) GROUP By OrderNo Having count(OrderNo) > 1
评论:错误的结果会给出1条记录而不是0.因为itemA和itemB orderNo不同。它给出1,因为有多个itemA记录。但我想要0.因为itemA orderNo!= itemB orderNo
并且我List<Map<item,price>>
它可以增长到100.在JPQL / Criteria Builder中实现所有3个案例的最佳方法是什么?
自我加入可以是一种方法,但我不确定如何在JPQL或Criteria Builder中基于self join
大小获得动态List<Map<item,price>>
。