我有以下查询:

FROM PatientInfo AS pi WHERE pi.customerApplicationPatient.customerApplication.customerApplicationId = :customerApplicationId AND pi.customerAppPatient.patient.patientId = :patientId

PatientInfo,CustomerApplicationPatient被关联,而customerApplicationPatientId是外键列。

CustomerApplicationPatient与CustomerApplication和Patient关联,其中customerApplicationId和PatientId作为外键列。


  问题:在给定customerApplicationId和PatientId的情况下获取所有PatientInfo记录。从某种意义上说,我的查询是一个很好的查询,不会产生太多的内部联接或交叉联接吗?有更好的方法吗?


我真的很感谢您的帮助,希望问题清楚。

谢谢,
斯里

最佳答案

当您需要在where子句中引用隐式连接时,您不应依赖隐式连接。

所以代替:

FROM PatientInfo AS pi WHERE
pi.customerApplicationPatient.customerApplication.customerApplicationId = :customerApplicationId
AND pi.customerAppPatient.patient.patientId = :patientId




select pi
from PatientInfo AS pi
inner join pi.customerApplicationPatient cap
inner join cap.customerApplication ca
inner join cap.patient p
where
    ca.customerApplicationId = :customerApplicationId
    AND p.patientId = :patientId


显式联接将转换为您期望的精确联接语句。先前的查询可能不太聪明,并且可能两次连接同一子表。

10-06 05:36