首页 > 解决方案 > 自加入帮助,只有一张表可以使用

问题描述

我的要求是从某个角色的工人中找到经理(上两层),看看那个人是否与领导相匹配。我有一个表可以使用 - 下面的数据示例。

工人ID 角色 经理ID
1 联系 5
2 联系 5
3 领导者 6
4 领导者 6

我已经完成了自我加入,但不确定我是否得到了正确的结果

select
    distinct t1.[workerid] as associateID,
    t1.[role] as assocaiteRole,
    t1.[managerid] as associateManagerID,
    t2.[managerid] as associateManagerLevel2ID,
    t2.[workerid] as leaderID,
    t2.[role] as managerRole,
    case WHEN t2.[workerid] = t2.[managerid] then 'bad' ELSE 'good' END AS result
FROM
    myTable t1
    JOIN myTable t2 ON t1.[managerid] = t2.[workerid]
WHERE
    t1.[role] = 'Associate'
    and t2.[role] = 'Leader'

我得到了正确的 managerLevel2。但是,在每种情况下,我都得到了我认为不正确的 managerid = worker。

结果:在这种情况下,第 1 行符合标准,因为 leaderid = managerlevel2

关联ID 副角色 助理经理 associatemanagerLevel2id 领导者
1 联系 5 7 7
2 联系 5 7 9
3 联系 6 7 10
4 联系 6 8 11

标签: sqlsql-serverself-join

解决方案


我的要求是从某个角色的工人中找到经理(上两层),看看那个人是否与领导相匹配。

根据此描述,您需要两个连接。要返回符合此条件的行:

select t.*, tm.role, tmm.role
from mytable t join
     mytable tm
     on tm.workerid = t.managerid join
     mytable tmm
     on tmm.workerid = tm.managerid
where t.role = 'Associate' and tmm.role = 'Leader';

推荐阅读