sql - 自加入帮助,只有一张表可以使用
问题描述
我的要求是从某个角色的工人中找到经理(上两层),看看那个人是否与领导相匹配。我有一个表可以使用 - 下面的数据示例。
工人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 |
解决方案
我的要求是从某个角色的工人中找到经理(上两层),看看那个人是否与领导相匹配。
根据此描述,您需要两个连接。要返回符合此条件的行:
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';
推荐阅读
- sql-server - Exclude time from datetime value in another row
- java - Converting a String to Set
- java - 在maven中使用项目变量
- r - 从使用 Haven 加载的 Stata 文件中提取值标签(值标签不是变量标签)
- sml - Create a list reading a file with SML
- ios - NSURLProtocol registerClass 适用于 iOS 模拟器,但不适用于实际设备
- javascript - 如何在 React JS 中显示这个 JSON 数据?
- reactjs - 如何在反应原生地图上显示方向
- php - Drupal 的 Organic Group 和 Group 模块有什么区别?
- python - 如何根据特定表达式将字符串列表保存在子列表中?