我有两个表[Users]和[Teams]。我的用户表看起来像这个[ID] [电子邮件]。我的团队表如下所示:[Team] [UserID]。
我需要像这样进行子选择:
SELECT * FROM users WHERE 'ID' != (SELECT UserID FROM teams)
问题是子选择返回多个值。所以我不能这样比较。
我想实现的目标:
我要从不是的用户数据中列出[表]。
示例:
Table [Users] | Table[Teams] |
-------------- ------------------
[ID] [E-Mail] [UserID] [Team]
1 example1@google.com | 1 Football
2 example2@google.com | 1 Basketball
3 example3@google.com | 2 Basketball
因此您可以看到有3个现有用户,但表[Teams]中未列出第三个用户。我需要来自用户的电子邮件,因为他不在这些团队中。
我该怎么做?
答案 0 :(得分:3)
使用!=
代替NOT IN
:
SELECT * FROM users WHERE ID NOT IN (SELECT UserID FROM teams WHERE UserID IS NOT NULL)
请注意,子查询中的UserID IS NOT NULL
...如果子查询返回一个或多个NOT IN
值,则NULL
将失败。
答案 1 :(得分:1)
您可以通过多种方式来实现相同的
以下是方法之一 选择 * 来自用户 不在其中的ID(从团队中选择用户ID)
答案 2 :(得分:1)
我们还可以使用EXISTS
子句:
SELECT *
FROM users u
WHERE NOT EXISTS (SELECT 1 FROM teams t WHERE u.ID = t.UserID);