2010-12-30 11 views
3

タイトルは完全なストーリーを示すものではありません。メッセージをお読みください。特定の条件を満たすオブジェクトの数を数える

私には、大人と子供の2つのオブジェクトがあります。 ChildはbooleanフィールドisMaleを持ち、Adultへの参照を持ちます。大人は子供を参照していません。

息子を持たない大人を含む息子の数を列挙するクエリを作成したいと思います。私が試した:すべての人の息子を持っていない大人をピックアップしていません

select 
    adult.id as col_0_0_, 
    count(child.id) as col_1_0_, 
    ... {omit properties} 
from 
    Child child 
right outer join 
    Adult adult 
     on child.parentId=adult.id 
where 
    child.isMale = 'true' 
group by 
    adult.id 

クエリ1をSQLに変換

クエリ1

SELECT adult, COUNT(child) FROM Child child 
RIGHT OUTER JOIN child.parent as adult 
WHERE child.isMale='true' 
GROUP BY adult 

クエリ2:

SELECT adult, COUNT(child.isMale) FROM Child child 
RIGHT OUTER JOIN child.parent as adult 
GROUP BY adult 

はSQLに変換します。

select 
    adult.id as col_0_0_, 
    count(child.id) as col_1_0_, 
    ... {omit properties} 
from 
    Child child 
right outer join 
    Adult adult 
     on child.parentId=adult.id 
group by 
    adult.id 

クエリ2は、人の息子の右の数を持っていません。基本的に、COUNTはisMaleを評価しません。
クエリ1のwhere句は、息子のいない大人を除外しました。

このユースケースのHQLクエリまたはCriteriaクエリを作成するにはどうすればよいですか?

ありがとうございました。

答えて

1

条件child.isMale='true'は、したがって、あなたがこのケースを処理する必要があります(isMaleNULLある)子供のいない大人のための偽です:

SELECT adult, COUNT(child) 
FROM Child child RIGHT OUTER JOIN child.parent as adult 
WHERE child IS NULL OR child.isMale='true' 
GROUP BY adult 
+0

パーフェクト、どうもありがとう! –

関連する問題