2013-08-22 33 views
0

我正試圖通過另一個連接創建的第二個表連接表。我不確定我是否正確地做到了這一點。我正在接收一個錯誤代碼,「每個派生表都必須有自己的別名」。創建別名不是我之前完成的。你能讓我知道如何調整我的查詢嗎?謝謝。如何在MySQL中編寫多個連接

Select 
    questionnaire_status.* 
FROM     
    questionnaire_status   
LEFT JOIN  
    (SELECT 
     rep_list.Last_Name,  
     rep_list.First_Name, 
     dept_codes.dept_name 
    FROM 
     rep_list 
    Left Join 
     dept_codes 
    ON 
     rep_list.dept =dept_codes.dept_id 
    ) 
ON  
    questionnaire_status.RR = rep_list.RR   
WHERE 
    questionnaire_Status.Attestation_submitted = '0' 

回答

1

您正在用subquerys,有些東西你不應該做,除非絕對必要。 (< - 性能是非常糟糕) 更好的是多次join是這樣的:

SELECT 
    questionnaire_status.*, 
    rep_list.Last_Name,  
    rep_list.First_Name, 
    dept_codes.dept_name 
FROM     
    questionarrie_status 
LEFT JOIN 
    rep_list 
ON 
    questionnaire_status.RR = rep_list.RR 
LEFT JOIN 
    dept_codes 
ON 
    rep_list = dept_codes.dept_id 
LEFT JOIN 
    questionarrie_status 

WHERE 
    questionnaire_Status.Attestation_submitted = '0' 
+0

謝謝。這工作並減少了查詢。 – Stevenyc091

0

使用as關鍵字別名這樣一個子查詢:

Select 
     questionnaire_status.* 
    FROM     
     questionnaire_status   
    LEFT JOIN  
     (SELECT 
      rep_list.Last_Name,  
      rep_list.First_Name, 
      rep_list.RR, 
      dept_codes.dept_name 
     FROM 
      rep_list 
     Left Join 
      dept_codes 
     ON 
      rep_list.dept =dept_codes.dept_id 
     ) as tbl_alias 
    ON  
     questionnaire_status.RR = tbl_alias.RR   
    WHERE 
     questionnaire_Status.Attestation_submitted = '0 

但你需要添加一個連接列內選擇如上

0

爲了讓我認爲你正在試圖獲得的結果,所有你需要做的是這樣的:

Select 
    questionnaire_status.* 
FROM 
    questionnaire_status 
LEFT JOIN rep_list ON questionnaire_status.RR = rep_list.RR 
LEFT JOIN dept_codes ON rep_list.dept = dept_codes.dept_id 

至於別名,當你這樣做,你正在創建別名「我」:

SELECT * FROM myTable me; 

的MySQL在抱怨喲烏爾子查詢沒有一個別名:

(SELECT 
    rep_list.Last_Name, 
    rep_list.First_Name, 
    dept_codes.dept_name 
FROM 
    rep_list 
Left Join 
    dept_codes 
ON 
    rep_list.dept =dept_codes.dept_id 
) 
    ^^^ It wanted an alias here, to cover the subquery 

所以,你有一個子查詢接下來的時間,做這樣的事情:

(SELECT 
    rep_list.Last_Name, 
    rep_list.First_Name, 
    dept_codes.dept_name 
FROM 
    rep_list 
Left Join 
    dept_codes 
ON 
    rep_list.dept =dept_codes.dept_id 
) REP 
    ^^^ MySQL has an alias (named REP) so it's happy now