我的数据库中有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次,这会降低性能。
任何人都可以提出最佳方式。
注意:我无法更改表格架构
提前致谢
答案 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