选择不在特定团队中的所有用户

时间:2016-01-06 14:50:24

标签: php sql

我想从数据库中选择不在我正在查看的特定团队ID范围内的所有用户。试图加入一个成员'应该列出所有不在活动团队中的成员的函数。

我似乎无法使SQL正确。要么我什么也得不到,或者我仍然得到一些活跃团队中的成员以及其他我不想要的成员。

This is the database, IMGUR

所以在这种情况下,在网站上查看团队ID 77,我只想看到" Admin",因为他是不在该特定团队中的一个成员。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

我认为这就是你所需要的:

SELECT *
FROM User
WHERE userid NOT IN (
    SELECT userid
    FROM UserTeam
    WHERE teamid = ...
)

它返回除特定团队中的用户以外的所有用户。

答案 1 :(得分:1)

我将其添加为答案,以解释您需要做什么:

你需要让你的联接正确。问题是您没有外键可以加入您的团队ID。您应该能够与用户(或其他任何东西)一起加入您的团队表。但是你需要团队ID密钥才能做到这一点。

您的表格很好,因为您拥有团队名称和用户的唯一信息和ID。但你没有办法加入他们。

向users表添加一个列,该列与团队表中的团队ID具有相同的名称和架构。我们为您的加入。

答案 2 :(得分:1)

in(或not in)子句有一个限制,请考虑加入。

使用您的示例,查询不在第77队的所有用户

select u.* 
from Users as u
join UserTeam as ut on ut.userid = u.userid
where ut.teamid <> 77

以上内容不适用于多个团队中的用户。如果用户可以在多个团队中,那么

select u.* 
from Users as u
where not exists (
    select ut.userid 
    from UserTeam as ut 
    where 
            ut.teamid = 77 
        and ut.userid = u.userid
)

答案 3 :(得分:1)

@ RonDeijker的回答是正确的。替代方式是

SELECT ...
FROM Users u
WHERE NOT EXISTS (
  SELECT 1
  FROM UserTeam ut
  WHERE ut.userid = u.userid
  AND ut.teamid = <whatever>
)

SELECT ...
FROM Users u
LEFT OUTER JOIN UserTeam ut
  ON u.userid = ut.userid AND ut.teamid = <whatever>
WHERE ut.userid IS NULL