sql连接多对多-3表
我在sqlserver中有3个表:sql连接多对多-3表,sql,sql-server,join,many-to-many,Sql,Sql Server,Join,Many To Many,我在sqlserver中有3个表: tbl_Users - User_ID, User_Name tbl_Roles - Role_ID, Role_Name tbl_Users_Roles_MTM - User_ID, Role_ID 一个用户可以分配多个角色,这将显示在多对多表中 在我的存储过程中,我需要Role\u Name,它不是指定给特定的用户ID(作为参数提供)。 我想我应该使用内部连接(或左连接…) 在SO和其他论坛中,
tbl_Users - User_ID, User_Name
tbl_Roles - Role_ID, Role_Name
tbl_Users_Roles_MTM - User_ID, Role_ID
一个用户可以分配多个角色,这将显示在多对多表中
在我的存储过程中,我需要Role\u Name
,它不是指定给特定的用户ID
(作为参数提供)。我想我应该使用内部连接(或左连接…) 在SO和其他论坛中,有许多条目的问题与此类似,但不完全相同。我做了很多实验,但现在我完全失去了我的手和脚 谢谢大家 编辑:
在SO的好人的帮助下,我让它开始工作:
SELECT r.Role_Name
FROM tbl_Roles r
WHERE NOT EXISTS(
SELECT 1
FROM tbl_Users_Roles_MTM ur
WHERE ur.User_ID = @User_ID
AND ur.Role_ID = r.Role_ID);
所以人们都很棒 您可以这样做:
SELECT *
FROM Roles
WHERE Role_Name = @rolename
AND NOT EXISTS(SELECT 1
FROM tbl_Roles AS r
INNER JOIN tbl_Users_Roles_MTM AS ur ON ur.Role_ID = r.Role_ID
WHERE r.role_Name = @rolename
AND ur.User_ID = @User_ID);
NOT EXISTS
谓词将确保该角色未分配给任何用户。尝试以下查询:
SELECT r.Role_Name
FROM tbl_Roles r
WHERE NOT EXISTS (
SELECT 1
FROM tbl_Users_Roles_MTM ur
WHERE ur.User_ID = @User_ID
AND ur.Role_ID = r.Role_ID);
我会这样做
select roles.Role_Name
from tbl_Roles as roles
left join tbl_Users_Roles_MTM as userRoles
on userRoles.Role_ID = roles.Role_ID
and userRoles.[User_ID] = @User_ID
where userRoles.Role_ID is null
基本上是左连接,然后只选择那些未连接的行如果添加一些示例表数据和预期结果,则更容易理解您的问题。最后一行应该是:
和ur.Role\u ID=r.Role\u ID)
,它工作得很好。请编辑您的答案,我将其标记为“答案”。现在我来看看这里提出的其他建议。谢谢!哎呀,我的错,多糟糕的打字错误啊(
select roles.Role_Name
from tbl_Roles as roles
left join tbl_Users_Roles_MTM as userRoles
on userRoles.Role_ID = roles.Role_ID
and userRoles.[User_ID] = @User_ID
where userRoles.Role_ID is null