【发布时间】:2021-04-01 11:34:08
【问题描述】:
我有三张桌子:
用户
id Username
---------------------------
1 | John
2 | Mark
职位
id Position Authority Department
---------------------------------------------------------------
1 | Supervisor | 3 4
2 | Clerk | 4 2
3 | Supervisor | 3 2
4 | Admin | 4 4
5 | Assistant | 5 2
用户位置
user_id position_id
----------------------------
1 | 1
2 | 3
Users 和 Positions 表使用 UserPositions 表相互关联,该表通过每个表的 id(外键)连接它们。
我正在尝试返回结果,其中包括大于或等于分配给用户的权限和部门的任何内容。到目前为止,我能够解决这个问题:
SELECT A.Username, B.Position, B.Authority, B.Department FROM UserPositions C
LEFT JOIN Users A on C.user_id = A.Id
LEFT JOIN Positions B on C.position_id = B.Id
返回:
Username Position Authority Department
---------------------------------------------------------------
John | Supervisor | 3 | 4
Mark | Supervisor | 3 | 2
但是,我想为该用户添加属于同一部门但又高于该用户所分配权限的职位。例如,John 已被分配到部门 4 和权限 3 的职位主管。所以我想返回部门 4 中所有职位的列表,并且权限为 3 或更大,并将其列在 John 旁边。马克也是一样。像这样:
Username Position Authority Department
---------------------------------------------------------------
John | Supervisor | 3 | 4
John | Admin | 4 | 4
Mark | Supervisor | 3 | 2
Mark | Clerk | 4 | 2
Mark | Assistant | 5 | 2
如何修改上面的查询以获得此结果?
【问题讨论】:
标签: sql sql-server left-join inner-join