0

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

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'
4

3 回答 3

1

您当前正在使用子查询,除非绝对必要,否则您不应该这样做。(<- 性能非常糟糕)更好的是多个连接是这样的:

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'
于 2013-08-22T13:30:35.260 回答
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

但是您需要将连接列添加到上面的内部选择中

于 2013-08-22T13:28:48.880 回答
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
于 2013-08-22T13:32:07.397 回答