我有以下查询:
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记录。从某种意义上说,我的查询是一个很好的查询,不会产生太多的内连接或交叉连接?有没有更好的方法呢?
我真的很感激任何帮助,希望问题很明确。
谢谢, 斯
答案 0 :(得分:1)
当您需要在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
显式联接将转换为您期望的确切联接语句。上一个查询可能不那么聪明,可能会加入同一个子表两次。