2017-05-03 6 views
0

は、私がここにJPQL:A、Bを選択支店Bから(TS)を数える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 

望ましい結果を得るが、その後、私はts.tourAppliedListの数を取得する必要がありますWHERE b.tourScheduleListを登録しようので、私結果が間違っている

b1 | 3 | 3 
b2 | 2 | 2 

になった

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 

にクエリを更新しました。 count(ts)私はその後、ちょうど後で、カウントを行うtsを返してみましたcount(ta)

に等しい理由を私は知らないが、それは、私はちょうど#{item.ts.tourAppliedList.size()}それはだビューで、その後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 

を考慮せずに、すべてのコンテンツを返しますts.deleted = 0

答えて

1

あなたの期待は間違っています。ときグループはどうなり ...

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

またはこの線に沿って何かをし、それらの行を数える:これは参加 はあなたを与えるのだろうか? シンプルにb1には3つのエントリがあり、b2には2つのエントリがあります。 あなたが必要とするものはcount(distinct ts) です。違いが見つかるはずです。

P.s.私はjpqlがカウント(別名)を許可するかどうかは分かりませんが、2つのクエリを実行し、tsとtaの結合だけでtsをカウントしてください。

+0

はい、私の期待は間違っていました。私はサブクエリをしなければならなかった –

関連する問題