我的SQL有点生疏,只是好奇,如果有更好的方式来做这个WHERE子句?假设有一种方法,我敢肯定有一种方法。它的运行速度很快,但我不喜欢它,并想知道它是否可以改进。有没有更好的方法来做到这一点?
SELECT DISTINCT p.firstname ,
p.middlename ,
p.lastname ,
p.gender ,
p.dob ,
p.id AS patientid ,
pr.id AS practiceid ,
pr.[name] AS practicename,
pr.parentaco ,
pp.encounterdate
FROM ((aco.patients_practices patients_practices
LEFT OUTER JOIN aco.patients p
ON (
patients_practices.patientid = p.id
)
)
LEFT OUTER JOIN aco.practices pr
ON (
patients_practices.practiceid = pr.id
)
)
INNER JOIN aco.patientpreferences pp
ON (
pp.patientid = p.id
)
WHERE (
pr.parentaco =
(SELECT parentaco
FROM aco.practices
WHERE master_companyid = 763
)
OR pr.id =
(SELECT parentaco
FROM aco.practices
WHERE master_companyid = 763
)
)
AND pp.encounterdate IS NOT NULL
'master_companyid'是否有唯一的约束? – Kash
否,因为它可以有很多孩子。这是Master_Company表中的FK。 – dbinott
您对'WHERE'子句中'pr'的引用有效地将'LEFT OUTER'连接转换为'INNER'连接。尾随的'INNER'加入也没有帮助。 – HABO