JPQL:SELECT b,count(ts)FROM Branch b JOIN b.tourScheduleList WHERE ts.deleted = 0

时间:2017-05-03 08:52:00

标签: jpql

我在这里得到了理想的结果

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

1 个答案:

答案 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