我在这里得到了理想的结果
SELECT b, count(ts) FROM Branch b JOIN b.tourScheduleList ts WHERE ts.deleted = 0 GROUP BY b.id ORDER BY b.name ASC
b1 | 2
b2 | 1
然后我需要得到ts.tourAppliedList
的计数,所以我将查询更新为
SELECT b, count(ts), count(ta) FROM Branch b JOIN b.tourScheduleList ts JOIN ts.tourAppliedList ta WHERE ts.deleted = 0 GROUP BY b.id ORDER BY b.name ASC
导致
b1 | 3 | 3
b2 | 2 | 2
结果是错误的。我不知道为什么count(ts)
等于count(ta)
我尝试返回ts
然后稍后进行计数,但它会在不考虑ts.deleted = 0
SELECT b, ts FROM Branch b JOIN b.tourScheduleList ts WHERE ts.deleted = 0 GROUP BY b.id ORDER BY b.name ASC
然后在视图中我#{item.ts.tourAppliedList.size()}
它没有考虑ts.deleted = 0
答案 0 :(得分:1)
问题是你的期望是错误的。 这个加入会给你:
b1 | ts1 | ta1
b1 | ts1 | ta2
b1 | ts2 | ta3
b2 | ts3 | ta4
b2 | ts3 | ta5
沿着这条线的东西......
当您对这些行进行分组和计算时会发生什么?
很简单,b1有3个条目,b2有2个条目。
你需要的是count(distinct ts)
由于每个不同的ta有多个ts,你会发现差异
P.S。我不知道jpql是否允许计数(不同),如果是这种情况,你最好做两个查询,只用ts连接计数ts然后用ts连接和ta