2013-08-27 125 views
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' 
     ) 
); 

這兩個有什麼區別?兩者給出不同的結果。SQL加入和子查詢混淆

+0

你可以設置小提琴 – Amit

+3

請使用內部連接的語法,而不是你的where子句中加入的。 –

+0

@Swoorup你說的是執行時間還是結果?回答是由其他人發佈的,屬於執行計劃。 – Amit

回答

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

時代的大多數連接比子查詢更快,但並非總是如此,我面臨着一個問題,幾天前,我有7個連接和執行時間以約50秒,我用子查詢替換了兩個連接(我懷疑這兩個連接導致了延遲),並且下降到1秒。

這裏有一些鏈接,可以幫助你:

  1. Join vs. sub-query
  2. when to use which