Sql 选择在其他表中没有关系的记录

Sql 选择在其他表中没有关系的记录,sql,oracle,Sql,Oracle,我有以下表格: 其中,每个表的主键是其名称+id,例如:UserRole.UserRoleId是UserRole的主键,UserRole.RoleId和UserRole中Role的外键 因此,我想选择不带Profil functionality.profilefunctionality.Count=0的所有函数性,这是我对以下查询所做的: 选择*FROM functionality,其中functionalityid不在SELECT functionalityid FROM profilefun

我有以下表格:

其中,每个表的主键是其名称+id,例如:UserRole.UserRoleId是UserRole的主键,UserRole.RoleId和UserRole中Role的外键

因此,我想选择不带Profil functionality.profilefunctionality.Count=0的所有函数性,这是我对以下查询所做的:

选择*FROM functionality,其中functionalityid不在SELECT functionalityid FROM profilefunctionality中

但我不知道如何进行以下选择:

无角色的所有功能性:

无用户的所有功能性:


只需展开子选项:

因此,对于没有角色的所有功能:

对于无用户的所有功能:


我使用减号减去没有角色出现的功能,因为它们显然也不会有用户

谢谢,它起作用了,只是在第一个查询中你忘了添加这个:在从PROFILFONCTIONNALITE选择不同的FONCTIONNALITEID中添加FONCTIONNALITEID;,我已经更新了你的答案
Funcionality.ProfileFuncionality.Count > 0 
AND Funcionality.ProfileFuncionality.Profile.RoleProfile.Count = 0
Funcionality.ProfileFuncionality.Count > 0 
AND Funcionality.ProfileFuncionality.Profile. RoleProfile.Count > 0
AND Funcionality.ProfileFuncionality.Profile.RoleProfile.Role.UserRole.Count = 0
SELECT *
FROM Funcionality
WHERE FuncionalityId NOT IN
   (SELECT FuncionalityId
    FROM ProfileFuncionality
    JOIN Profile 
        ON Profile.Profileid = ProfileFuncionality.Profileid
    JOIN RoleProfile 
        ON Profile.Profileid = RoleProfile.Profileid);
SELECT *
FROM Funcionality
WHERE FuncionalityId NOT IN
    (SELECT FuncionalityId
     FROM ProfileFuncionality
     JOIN Profile 
        ON Profile.Profileid = ProfileFuncionality.Profileid
     JOIN RoleProfile 
        ON Profile.Profileid = RoleProfile.Profileid
     JOIN Role 
        ON Role.Roleid = RoleProfile.Roleid
     JOIN UserRole 
        ON Role.Roleid = UserRole.Roleid)
 MINUS
 SELECT *
 FROM Funcionality WHERE FuncionalityId NOT IN
     (SELECT FuncionalityId
      FROM ProfileFuncionality
      JOIN Profile 
         ON Profile.Profileid = ProfileFuncionality.Profileid
      JOIN RoleProfile 
         ON Profile.Profileid = RoleProfile.Profileid);