3
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'
          )
);

这两者有什么区别?两者都给出不同的结果。

4

2 回答 2

1

大多数时候连接比子查询快,但并非总是如此,几天前我遇到了一个问题,我有 7 个连接,执行时间大约需要 50 秒,我用子查询替换了两个连接(我的两个连接怀疑是造成延迟),它下降到 1 秒。

以下是一些对您有帮助的链接:

  1. 加入与子查询
  2. 什么时候用哪个
于 2013-08-27T06:17:30.697 回答
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'
)
于 2013-08-27T06:06:39.400 回答