-1

ロード中に子オブジェクトをクエリしたいのですが、

ここに私が使用しているクエリがあります:

SELECT app FROM ApplicantPerson app left join app.gpaList gpa , DesignatedSchool ds
WHERE
    app.applicantPersonId.applPersonId = ds.applPersonId 
    AND app.appStatusCd = 'P'  and gpa.verifiedInd= 1
    AND ds.designateStatusCd = 'A' 
    AND ds.medInstId = ?  
    AND app.applicantPersonId.applYear = ?
    AND ds.applYear = ?

ただし、applicantperson には 24 のレコードがあり、子 gpalist には 2 つのレコードがあり、1 つが検証済み = 1 で、2 つ目が検証済み =0 です。

注: ApplicantPerson と Gpa の間には 1 対多の関係があります。

しかし、上記のクエリの出力は 30 レコードで、gpalist は 2 レコードを取得しています。

親と子のgpalistに24個のレコードを出力し、1個のレコードを検証する必要があります= 1

4

1 に答える 1

0

where句は、クエリによって返されるエンティティを選択するために使用されますが、クエリによって返されるものは変更されません。クエリがのインスタンスを返しApplicantPerson、返された人の子を要求すると、クエリがそれらの人を取得するために使用したものに関係なく、常にすべての子を取得します。

クエリはとの間appでデカルト積を実行するdsため、予想よりも多くの行を取得するのは当然のことです。個別のインスタンスを取得するには、distinctキーワードを使用します。

select distinct app from ...
于 2012-10-21T16:38:13.303 に答える