如何创建多次引用另一张表的视图,将关联ID替换为对应名称?
解决方法:多次关联同一张表获取关联名称
你需要通过多次内联Users表来实现这个需求——因为ManagerId和SupervisorId都是引用Users.UserId的外键,所以我们可以分别为这两个关联创建不同的表别名,从而获取对应的FirstName。
完整SQL查询语句
SELECT u.UserId, u.FirstName, u.LastName, m.FirstName AS ManagerName, -- 替换原ManagerId为经理的名字 s.FirstName AS SupervisorName -- 替换原SupervisorId为主管的名字 FROM Users u INNER JOIN Details d ON u.UserId = d.UserId INNER JOIN Users m ON d.ManagerId = m.UserId -- 关联经理的用户信息 INNER JOIN Users s ON d.SupervisorId = s.UserId; -- 关联主管的用户信息
关键点解释:
- 给
Users表起了三个别名:u(当前用户)、m(经理)、s(主管),这样就能区分三次关联的同一张表 - 通过
d.ManagerId = m.UserId把Details里的经理ID和Users表对应的用户关联起来,取m.FirstName作为经理名称 - 同理,
d.SupervisorId = s.UserId关联主管ID和对应的用户,取s.FirstName作为主管名称
查询结果(和你的预期一致):
| UserId | FirstName | LastName | ManagerName | SupervisorName |
|---|---|---|---|---|
| 1 | John | Wick | Lebron | Black |
| 2 | Black | Panther | Lebron | John |
| 3 | Lebron | James | Lebron | John |
如果你希望保留原字段名(比如还是叫ManagerId和SupervisorId,只是值换成名字),可以把别名改成AS ManagerId和AS SupervisorId,不过从语义上来说,改成ManagerName这类更清晰的名字会更好。
内容的提问来源于stack exchange,提问作者Odie
相关产品推荐
相关产品推荐

