SQL将一个表连接到多个列

时间:2016-10-05 10:41:49

标签: sql sql-server database join

我的数据库中有2个表

1)报告表

 AppNo AppName AddedBy AssignedTo ModifiedBy
 -------------------------------------------
    1   App1       1        2           1      
    2   App2       1        2           2
    3   App3       2        2           2
    4   App4       1        2           3

2)用户表

   UserId  UserName Role
   ----------------------
    1     Raj      Manager
    2     Sid      Lead
    3     KK       Rep

所以我想加入两个表格,以便我可以取代Id的名称

需要的结果:

  AppNo AppName AddedBy AssignedTo ModifiedBy
  -------------------------------------------
    1   App1     Raj      Sid          Raj      
    2   App2     Raj      Sid          Sid
    3   App3     Sid      Sid          Sid
    4   App4     Raj      Sid           KK

我的查询:

SELECT
R.AppNo, R.AppName,
u1.UserName as AddedBy,
u2.UserName as AssignedTo,
u3.UserName as ModifiedBy

FROM Report R

LEFT OUTER JOIN Users u1 on u1.UserID = R.AddedBy
LEFT OUTER JOIN Users u2 on u2.UserID = R.AssignedTo
LEFT OUTER JOIN Users u3 on u3.UserID = R.ModifiedBy

但我不想多次加入User table ..

在原始报告表中,有近8个UserId列,所以我无法加入8次,这会降低性能。

任何人都可以提出最佳方式。

注意:我无法更改表格架构

提前致谢

2 个答案:

答案 0 :(得分:1)

多次加入是唯一的方法;这就是数据和结构。

应该没有性能问题,因为数据库通常设计得很好来处理这个问题。仅仅因为JOIN对人类看起来很复杂并不意味着它对于优化器或数据库来说既复杂又昂贵。

答案 1 :(得分:0)

您可以对列使用笛卡尔联接,但性能在很大程度上取决于表的索引程度...

select R.AppNo,
       R.AppName,
       (select UserName from Users where UserID = R.AddedBy) as AddedBy,
       (select UserName from Users where UserID = R.AssignedTo) as AssignedTo,
       (select UserName from Users where UserID = R.ModifiedBy) as ModifiedBy
from Report R