2012-05-29 54 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

相关问题