0

我在处理这个查询时遇到了问题。我已经阅读了很多东西,但还没有找到解决方案。问题出在子查询上——它真的不喜欢它。有人可以帮我解决这个问题吗?

第一个表表示已执行的工作表,第二个表显示员工信息。我基本上是在尝试使用作为 HR 代码的“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
4

2 回答 2

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
于 2012-05-29T17:16:42.020 回答
1

您正在引用 T2,WHERE SID = T2.position_nbr但不清楚要使用哪个 T2。它可能是主 FROM 子句或子查询中的那个。由于存在歧义,查询将无法编译。

为了使它起作用,您需要为其中一个 T2 设置别名

例如

 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 的回答所示,您可以再次加入同一张表,这通常表现得更好。

于 2012-05-29T17:26:51.917 回答