我有三个表:
用户数
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
表User和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
如何修改上面的查询以获得此结果?
我认为这是另一个连接:
select u.username, p1.position, p1.authority, p1.department
from userpositions up
inner join users u on u.id = up.user_id
inner join positions p on p.id = up.position_id
inner join positions p1 on p1.department = p.department and p1.authority >= p.authority
笔记:
我把left join
s转向了inner join
;问题陈述中没有任何内容表示您想要前者
有意义的表别名使查询更易于遵循
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句