sql - 如何包含列值大于使用内连接的 SQL 查询中返回值的行?

标签 sql sql-server left-join inner-join

我有三个表:

用户

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

如何修改上面的查询以获得此结果?

最佳答案

我认为这是另一个连接:

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

注释:

  • 我将左联接改为内联接;您的问题陈述中没有任何内容表明您想要前者

  • 有意义的表别名使查询更易于理解

关于sql - 如何包含列值大于使用内连接的 SQL 查询中返回值的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65414204/

相关文章:

php - 2 Mysql表sum列分组并求减

sql - 选择新客户的订单

sql-server - 在数据库中存储各种统计数据的最佳方法

Mysql - LEFT JOIN - 获取第一个条目

MySQL 连接问题

sql - perl + postgresql 代码导致 Pg.pm 出现问题

php - 创建具有多个列和表变量的查询

sql - 使用参数更新存储过程来自不同表的列名

r - 使用 DBI :dbConnect in R 连接到 SQL Server 时出现问题

SQL Left Join 过滤后丢失行