SQL Server从主键在另一个表中不显示为外键的表中进行选择
我有三张桌子-SQL Server从主键在另一个表中不显示为外键的表中进行选择,sql,sql-server,Sql,Sql Server,我有三张桌子- User UserID PK SecurityGroup SecurityGroupID PK, SecurityGroupName UserSecurityGroup UserSecurityGroupID, UserID FK, SecurityGroupID FK 我试图选择用户不属于的安全组的名称 用户可以是多个组的成员 i、 我有三个安全组:管理员、版主、成员 我传递一个用户ID。所述用户被分配到管理员组和版主组,但不
User UserID PK
SecurityGroup SecurityGroupID PK, SecurityGroupName
UserSecurityGroup UserSecurityGroupID, UserID FK, SecurityGroupID FK
我试图选择用户不属于的安全组的名称
用户可以是多个组的成员
i、 我有三个安全组:管理员、版主、成员
我传递一个用户ID。所述用户被分配到管理员组和版主组,但不属于成员组。我正在尝试显示“成员”
以下是我迄今为止的尝试:
尝试1-
select tblSecurityGroup.SecurityGroupName
from tblSecurityGroup
inner join tblUserSecurityGroup
on tblSecurityGroup.SecurityGroupID = tblUserSecurityGroup.SecurityGroupID
inner join tblUser
on tblUserSecurityGroup.UserID = tblUser.UserID
where tblUser.UserID = 1
and tblSecurityGroup.SecurityGroupID not in (tblUserSecurityGroup.SecurityGroupID);
select tblSecurityGroup.SecurityGroupName
from tblSecurityGroup
inner join tblUserSecurityGroup
on tblSecurityGroup.SecurityGroupID = tblUserSecurityGroup.SecurityGroupID
inner join tblUser
on tblUserSecurityGroup.UserID = tblUser.UserID
where tblUser.UserID = 1
and not exists (select tblSecurityGroup.SecurityGroupID
from tblSecurityGroup
where tblUserSecurityGroup.SecurityGroupID = tblSecurityGroup.SecurityGroupID);
尝试2-
select tblSecurityGroup.SecurityGroupName
from tblSecurityGroup
inner join tblUserSecurityGroup
on tblSecurityGroup.SecurityGroupID = tblUserSecurityGroup.SecurityGroupID
inner join tblUser
on tblUserSecurityGroup.UserID = tblUser.UserID
where tblUser.UserID = 1
and tblSecurityGroup.SecurityGroupID not in (tblUserSecurityGroup.SecurityGroupID);
select tblSecurityGroup.SecurityGroupName
from tblSecurityGroup
inner join tblUserSecurityGroup
on tblSecurityGroup.SecurityGroupID = tblUserSecurityGroup.SecurityGroupID
inner join tblUser
on tblUserSecurityGroup.UserID = tblUser.UserID
where tblUser.UserID = 1
and not exists (select tblSecurityGroup.SecurityGroupID
from tblSecurityGroup
where tblUserSecurityGroup.SecurityGroupID = tblSecurityGroup.SecurityGroupID);
非常感谢您为nooby学生提供指导。您的问题可以通过
not exists
查询来回答。这里有一种方法:
select sg.SecurityGroupName
from tblSecurityGroup sg
where not exists (select 1
from tblUserSecurityGroup usg
where sg.SecurityGroupID = usg.SecurityGroupID and
usg.UserID = 1
);
请注意,不需要
tblUser
,因为UserID
位于tblUserSecurityGroup
中。这些尝试的结果是什么?完全运行我的查询不会返回任何结果。运行除最后一行之外的每次尝试都会返回用户所属的安全组。您使用的是MySQL还是SQL Server?不要给未涉及的产品贴标签…抱歉,标签已经修改。谢谢!工作是一种享受。