不使用子查询如何从Agent表获取保单对应代理人的主管薪资?
调整逻辑
你当前的写法只关联了一次Agent表,取到的是售出保单的代理人本人的薪资,而非其主管的薪资。因为主管的信息也存储在Agent表中,只需要对Agent表做自连接即可实现需求,不需要子查询:
- 给Agent表设置两个别名:
a1对应售出保单的普通代理人,a2对应该代理人的上级主管 - 新增关联条件:
a1的上级主管编号 =a2的代理人编号 - 薪资取
a2的薪资字段即可
调整后的SQL(兼容你原有的隐式连接写法)
SELECT PolicyNo, InsuredName, a2.salary AS [Salary of Agent Supervisor] FROM Agent a1, Agent a2, Policy, Insured WHERE a1.AgentNo = Policy.AgentNo AND a1.SupervisorNo = a2.AgentNo AND Policy.InsuredNo = Insured.InsuredNo AND a1.Function <> "Manager"
更规范的显式JOIN写法(可读性更高)
SELECT p.PolicyNo, i.InsuredName, a2.salary AS `Salary of Agent Supervisor` FROM Policy p INNER JOIN Agent a1 ON p.AgentNo = a1.AgentNo INNER JOIN Agent a2 ON a1.SupervisorNo = a2.AgentNo INNER JOIN Insured i ON p.InsuredNo = i.InsuredNo WHERE a1.Function <> 'Manager'
注:如果你的Agent表中存储上级代理人编号的字段名不是
SupervisorNo,替换成实际表中的对应字段名即可。
内容的提问来源于stack exchange,提问作者Stamp777
相关产品推荐
相关产品推荐

