在SQL Server中左外连接

时间:2014-09-11 03:38:31

标签: sql sql-server

我不知道如何使用SQL Server中的LEFT OUTER JOIN解决我的问题

我有这样的场景:

角色情景

--------------------
    User Access
--------------------
UserID  |  RoleID
--------------------
1-123   |  1
1-123   |  2
1-456   |  1
1-456   |  3
---------------------


--------------------
      Profile
--------------------
UserID  |  Name
--------------------
1-123   |  John
1-456   |  Carl
---------------------

--------------------
     User Role
--------------------
Role ID |  Role Name
--------------------
1       |  Teacher
2       |  Employee
3       |  Head
4       |  IT Staff
---------------------

这是我的问题

我想显示UserID : 1-123未分配的所有角色(注意:角色分配在用户访问中)。

我尝试LEFT OUTER JOIN查看哪个不存在于另一个表中,但它只显示了两个用户都没有的IT人员。

请帮帮我

1 个答案:

答案 0 :(得分:2)

您可以通过多种方式实现这一目标。这是使用NOT IN

的一种方法
SELECT *
FROM UserRole
WHERE RoleId NOT IN (
    SELECT RoleId
    FROM UserAccess
    WHERE UserId = '1-123')

这将返回用户' 1-123'不具有。


以下是OUTER JOIN

的使用方法
SELECT *
FROM UserRole U
   LEFT JOIN UserAccess UA ON U.RoleId = UA.RoleID AND UA.UserId = '1-123'
WHERE UA.UserId IS NULL

这是使用NOT EXISTS的方法:

SELECT *
FROM UserRole UR
WHERE NOT EXISTS (
    SELECT 1
    FROM UserAccess UA
    WHERE UserId = '1-123' AND UA.RoleId = UR.RoleId)