MS ACCESS 查询 table,用于一个 table 中的所有项目,但不是另一个中的所有项目

MS ACCESS Query with junction table, for all items in one table, but not in another

要创建多对多关系,我有三个 table:

tblEmployee,包含员工

tlkpPermission,包含员工可以加入的 11 个不同的可能权限组

tblEmployeeXPermission,将EmployeeID与一个或多个PermissionID

结合起来

我要创建的是一个查询,显示员工不属于哪些权限组。

因此,如果 EmployeeID 12345PermissionID 1,2,3,4,5, 关联但不是 6,7,8,9,10,11(在 EmployeeXPermission table) 然后我希望查询显示 EmployeeID 12345 不是 PermissionID 6,7,8,9,10,11.

的一部分

在所有的 JOIN 和查询选项中,我只能得到一个查询来显示 PermissionIDs 员工与哪个员工关联,而不是 PermissionIDs 员工未关联的查询。

如有任何帮助,我们将不胜感激。

谢谢

您需要从员工和权限的所有组合开始,这种类型的连接是 CROSS JOIN,但是 MsAccess SQL 在新的 SQL 语法中没有它。您可以使用在 FROM 子句中列出表的旧语法,以逗号分隔,并在 WHERE 子句中提供连接条件(如果有):

SELECT 
  EmployeeId,
  PermissionID
FROM 
     tblEmployee as E,
     tlkpPermission as P
where not exists (
       select 1 
       from tblEmployeeXPermission X 
       where X.EmployeeId=E.EmployeeId 
       and X.PermissionId=P.PermissionId
       )

此处 WHERE 子句之前的部分将为您提供所有员工 - 权限组合,而 WHERE 子句会删除 tblEmployeeXPermission 中出现的那些,留下您想要的那些。