我不知道如何使用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人员。
请帮帮我
答案 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)