我想从数据库中选择不在我正在查看的特定团队ID范围内的所有用户。试图加入一个成员'应该列出所有不在活动团队中的成员的函数。
我似乎无法使SQL正确。要么我什么也得不到,或者我仍然得到一些活跃团队中的成员以及其他我不想要的成员。
所以在这种情况下,在网站上查看团队ID 77,我只想看到" Admin",因为他是不在该特定团队中的一个成员。
非常感谢任何帮助。
答案 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