2017-10-06 53 views
0

我有以下表格:选择没有其他表的关系记录

enter image description here

,其中每个表的主键是它的名称+编号(例如:UserRole.UserRoleId是主键对于UserRole,UserRole.RoleIdRole的外键在UserRole)。

所以我想选择所有Funcionality没有Profil(Funcionality.ProfileFuncionality.Count = 0),我用下面的查询做:

SELECT * FROM Funcionality WHERE FuncionalityId NOT IN (SELECT FuncionalityId FROM ProfileFuncionality);

但我无法弄清楚如何做以下选择:

所有Funcionality没有Role

Funcionality.ProfileFuncionality.Count > 0 
AND Funcionality.ProfileFuncionality.Profile.RoleProfile.Count = 0 

所有Funcionality没有User

Funcionality.ProfileFuncionality.Count > 0 
AND Funcionality.ProfileFuncionality.Profile. RoleProfile.Count > 0 
AND Funcionality.ProfileFuncionality.Profile.RoleProfile.Role.UserRole.Count = 0 

回答

1

只是扩展子选择:

所以对于没有一个角色的所有功能:为所有的funcionality

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); 

我使用减号没有一个角色出现减去功能,因为他们显然还没有用户

+0

谢谢你,它的工作,只为第一查询ü忘了补充一点: '和FONCTIONNALITEID(从PROFILFONCTIONNALITE中选择不同的FONCTIONNALITEID);',我已经更新了您的答案 –

相关问题