Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server从主键在另一个表中不显示为外键的表中进行选择_Sql_Sql Server - Fatal编程技术网

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?不要给未涉及的产品贴标签…抱歉,标签已经修改。谢谢!工作是一种享受。