【问题标题】:Using Query Results in a Subquery在子查询中使用查询结果
【发布时间】:2012-06-03 22:39:26
【问题描述】:

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

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

【问题讨论】:

    标签: sql subquery teradata


    【解决方案1】:

    您可以尝试另一个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
    

    【讨论】:

    • 这很好用。我需要在连接中添加一个“as”,但除此之外它很好。当我第二次尝试对其进行分层以获得更高级别的管理时,我用完了假脱机空间。我猜你不可能全部赢。感谢您的帮助,先生们。
    【解决方案2】:

    您在 WHERE SID = T2.position_nbr 中引用了 T2,但不清楚要使用哪个 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's answer 所示,您可以再次加入同一个表,这通常表现更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多