2012-05-29 50 views
0

我在查詢時遇到問題。我已閱讀了很多內容,但尚未找到解決方案。問題出在子查詢 - 它真的不喜歡它。有人能幫我把這個工作嗎?在子查詢中使用查詢結果

第一個表格表示工作執行表格,第二個表格顯示員工信息。我基本上正在嘗試使用人力資源代碼'position_reports_to'字段爲僱員獲取主管名稱。順便說一句,這是在Teradata。

謝謝!

select 
t1.record_number, 
T1.record_created_by, 
T2.last_name, 
T2.first_name, 
T2.employee_no, 
t2.position_number, 
T2.position_reports_to as SUPID, 
(select last_name from T2 where SID=T2.position_nbr) as SUP 
from T1 
left join T2 on T1.record_created_by=T2.employee_no 
where 
t1.record_create_date=current_date 

回答

3

你可以嘗試其他LEFT JOIN而不是子查詢:

SELECT 
    t1.record_number, 
    T1.record_created_by, 
    T2.last_name, 
    T2.first_name, 
    T2.employee_no, 
    t2.position_number, 
    T2.position_reports_to AS SUPID, 
    sup.last_name AS sup_last_name 
FROM T1 
LEFT JOIN T2 ON T1.record_created_by=T2.employee_no 
LEFT JOIN T2 sup ON sup.SID=T2.position_nbr 
WHERE t1.record_create_date=current_date 
+0

這工作得很好。我需要在連接中加入'as',但除此之外這很好。當我嘗試第二次對其進行分層以獲得下一級管理時,我耗盡了後臺空間。我想你無法贏得所有人。謝謝你的幫助,先生們。 – NewbBill

1

你引用T2在WHERE SID = T2.position_nbr但其並不清楚使用哪個T2。它可能是主FROM子句或子查詢中的一個。由於含糊不清,查詢將無法編譯。

爲了這個工作,你需要別名的T2S

例如一個

SELECT 
     ..... 
     (select last_name from T2 Sup where Sup.SID=T2.position_nbr) as SUP 
FROM 
    T1 
    left join T2 on T1.record_created_by=T2.employee_no 
     .... 

然而,隨着bfavaretto's answer顯示你可以加入到同一個表再次,通常執行得更好反正。

+0

+1用於確定實際的原因 – bfavaretto

相關問題