sql连接多对多-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和其他论坛中,

我在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和其他论坛中,有许多条目的问题与此类似,但不完全相同。我做了很多实验,但现在我完全失去了我的手和脚

谢谢大家

编辑:
在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