选择其中subselect返回多个值的行

时间:2018-12-21 10:55:10

标签: mysql sql database select

我有两个表[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]中未列出第三个用户。我需要来自用户的电子邮件,因为他不在这些团队中。

我该怎么做?

3 个答案:

答案 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);