我有3个表,角色,UsersInRoles和用户
我想选择所有角色和用户匹配where子句的唯一用户记录
SELECT r.*, u.UserName
FROM [dbo].[Roles] r
LEFT JOIN [dbo].[UsersInRoles ] ur
ON r.Id = ur.RoleId
LEFT JOIN [dbo].[Users] u
ON u.Id = ur.UserId
WHERE u.UserName = 'admin'
我想要的是:
RoleId,角色,用户名
1管理员联系
2学生空
当我包含where子句时,不会返回学生角色
答案 0 :(得分:1)
将过滤器从WHERE子句移动到Users表的连接条件:
SELECT r.*, u.UserName
FROM [dbo].[Roles] r
LEFT JOIN [dbo].[UsersInRoles ] ur
ON r.Id = ur.RoleId
LEFT JOIN [dbo].[Users] u
ON u.Id = ur.UserId
AND u.UserName = 'admin'
这将返回Roles中的所有记录,以及来自UsersInRoles的任何匹配记录,但仅返回UserName等于“admin”的用户中匹配记录的记录。
答案 1 :(得分:0)
SELECT r.*, u.UserName
FROM [dbo].[Roles] r
LEFT JOIN [dbo].[UsersInRoles ] ur
ON r.Id = ur.RoleId
LEFT JOIN [dbo].[Users] u
ON u.Id = ur.UserId
WHERE (u.UserName = 'admin' or u.UserName is null)