2017-05-03 1 views
0

j'obtenir le résultat souhaité iciJPQL: SELECT b, compter (ts) de branche b REJOIGNEZ b.tourScheduleList OÙ ts.deleted = 0

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 

mais je dois obtenir le nombre de ts.tourAppliedList donc je mis à jour la requête à

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 

qui a donné lieu à

b1 | 3 | 3 
b2 | 2 | 2 

le résultat est erroné. Je ne sais pas pourquoi count(ts) est égal à count(ta)

J'ai essayé de revenir ts alors faites juste un nombre plus tard, mais il est de retour tout son contenu sans tenir compte du 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 

alors dans la vue que je viens #{item.ts.tourAppliedList.size()} c'est sans tenir compte du ts.deleted = 0

Répondre

1

Le problème est que vos attentes sont fausses. cette jointure vous donnera:

b1 | ts1 | ta1 
b1 | ts1 | ta2 
b1 | ts2 | ta3 
b2 | ts3 | ta4 
b2 | ts3 | ta5 

Ou quelque chose le long de cette ligne ... Que se passe lorsque vous groupe et compter les lignes? Simple, vous avez 3 entrées pour b1 et 2 pour b2. Ce dont vous avez besoin, il y a count(distinct ts) Puisqu'il y a plusieurs ts pour chaque différent, vous trouverez alors une différence

P.s. Je ne sais pas si jpql permet un compte (distinct), si c'est le cas vous feriez mieux de faire deux requêtes et comptez ts avec la jointure seulement sur ts et ensuite ta avec la jointure sur ts et ta

+0

ouais, mon attente était fausse. je devais faire une sous-requête –