如何在MySQL中编写多个连接

时间:2013-08-22 13:24:59

标签: mysql join

我正在尝试使用从另一个连接创建的第二个表来连接表。我不确定我是否正确这样做。我收到一个错误代码“每个派生表必须有自己的别名”。创建别名不是我以前做过的事情。你能告诉我如何调整我的查询吗?谢谢。

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'

3 个答案:

答案 0 :(得分:1)

您目前正在使用subquerys,除非绝对必要,否则您不应该这样做。 (< - 表现非常糟糕) 更好的是多个联接是这样的:

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'

答案 1 :(得分: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

但您需要将连接列添加到内部选择中,如上所述

答案 2 :(得分: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