SELECT familyname
FROM dtoohey.patient, DTOOHEY.account, dtoohey.doctor
WHERE dtoohey.account.patientID = dtoohey.patient.patientid
AND dtoohey.doctor.providerno = DTOOHEY.account.providerno
AND dtoohey.doctor.name = 'Dr Brian';
SELECT familyname
FROM dtoohey.patient
WHERE patientid IN (
SELECT patientid
FROM dtoohey.account
WHERE providerno IN (
SELECT providerno
FROM dtoohey.doctor
WHERE name = 'Dr Brian'
)
);
这两者有什么区别?两者都给出了不同的结果。
答案 0 :(得分:1)
执行计划的主要区别。可能此查询可能更有效 -
SELECT familyname
FROM dtoohey.patient p
WHERE EXISTS(
SELECT 1
FROM dtoohey.account a
JOIN dtoohey.doctor d ON d.providerno = a.providerno
WHERE a.patientID = p.patientid
AND d.Name = 'Dr Brian'
)
答案 1 :(得分:1)
大多数时候加入比子查询更快但不总是,我在几天前遇到了一个问题,我有7个连接,执行时间大约需要50秒,我用子查询替换了两个连接(两个加入我怀疑导致延迟的事情,并且下降到1秒。
以下是一些可以帮助您的链接: