我有以下查询: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
显式联接将转换为您期望的精确联接语句。先前的查询可能不太聪明,并且可能两次连接同一子表。