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

噩梦637

我有三个表:

用户数

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 joins转向了inner join问题陈述中没有任何内容表示您想要前者

  • 有意义的表别名使查询更易于遵循

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用BLOB列和内部联接从SQL返回不同的值

如何使用 sql 从内部联接查询中选择多个值?

在sql查询中使用Max(date)聚合函数时,返回所有列中包含Null值的行

通过内部联接在特定列中包含包含空值的行

使用内部联接时具有不同值的SQL查询

如何删除数组中包含大于10的值的行

如果列中的值小于或大于值,如何删除行

如何替换SQL SELECT查询中返回的列值?

如何使用联接查询返回两个表值

mssql-使用内部联接在同一行中显示列值吗?

如何获取大于多列值的值而不是使用 SQL Server 中的复合键字段

如何从SQL内部联接表中删除重复的值?

如何使用内部联接查询根据 SQL Server 中的日期时间变化获取前 1 行?

如何按联接表的行(而非列)中的值对mysql查询结果排序?

具有多个内部联接的SQL查询返回错误的值计数

SQL查询根据行中的值返回值

SPServices CAMLQuery返回的是ows ID,其中包含查询列中的值。如何从结果中删除ID

SQL查询中不使用内部联接

如何使用sql查询在同一列中减去两行的值?

如何使用 SQL 查询在同一列中减去两行的值?

如何限制内部查询中列的特定值的返回记录数?

如何使用联接查询一列中具有多个值的表

内部联接返回多个值

如何使用子查询更新 SQL 中的多列值?

用于选择列仅包含特定值的行的 SQL 查询

如何使用SQL从列中获取列表中大于等于25%,50%,75%的值

如何在SQL Server TEXT列中查询包含XML(不是xml列类型)的值

在 SQL 查询输出中包含没有值的行

SQL Server:子查询返回的值大于1