如何联接具有多对多关系的表

时间:2020-05-04 09:09:33

标签: sql sql-server

我试图将四个表联接在一起,一个表是一个联接表,因为其中两个表具有多对多关系:

ER Diagram

从用户中选择DispalyName,从角色中选择名称和描述以及从权限中选择许可和描述的查询是什么。

我知道如何将两个表连接在一起,但是我的方法不适用于此问题。

我尝试了以下查询,但似乎不喜欢它。

SELECT org.[User].[DisplayName], org.[Role].[Description], org.[Permission].[Description]
FROM org.[Role] rolee
JOIN org.[RolePermissions] rolePerms ON rolee.ID = rolePerms.RoleId 
JOIN org.[Permission] perms ON rolePerms.PermissionId = perms.ID
WHERE [User].[email] LIKE '%myemail%'

2 个答案:

答案 0 :(得分:1)

尝试一下-您似乎忘记了与用户表联接

SELECT org.[User].[DisplayName], org.[Role].[Description], org.[Permission].[Description]
FROM org.[User] user Join org.[Role] rolee on user.RoleID = rolee.ID
JOIN org.[RolePermissions] rolePerms ON rolee.ID = rolePerms.RoleId 
JOIN org.[Permission] perms ON rolePerms.PermissionId = perms.ID
WHERE org.[User].[email] LIKE '%myemail%'

答案 1 :(得分:0)

您需要加入用户

SELECT u.[DisplayName], r.[Description], p.[Description]
FROM org.[Role] r
JOIN org.[RolePermissions] rp ON r.ID = rp.RoleId 
JOIN org.[Permission] p ON rp.PermissionId = p.ID
JOIN org.[User] u ON r.Id = u.RoleID
WHERE u.email LIKE '%myemail%'