MySQL 如何在MySQL中使用“Where not in”来过滤数据使用两列


<!–

–>

MySQL 如何在MySQL中使用“Where not in”来过滤数据使用两列

在MySQL中,使用“Where not in”可以方便地从一个表中提取不包含另一个表中的数据。通常情况下,“Where not in”只需要使用一个列来提取数据。但是,有些情况下可能需要基于两列来过滤数据。本文将介绍如何在MySQL中使用“Where not in”来过滤数据使用两列。

阅读更多:

创建表格

在演示该功能之前,我们需要创建两个表来测试其行为。首先,我们将创建一个名为“users”的表,其中包含用户姓名和电子邮件地址(两列):

(adsbygoogle = window.adsbygoogle || []).push({});

CREATE TABLE users (
  name VARCHAR(50),
  email VARCHAR(50)
);

其次,我们将创建另一个名为“blacklist”的表格,其中包含被屏蔽的电子邮件地址:

CREATE TABLE blacklist (
  email VARCHAR(50)
);

现在,我们向每个表中添加一些样例数据。

INSERT INTO users VALUES 
  ('John', 'john@example.com'),
  ('Mary', 'mary@example.com'),
  ('Sarah', 'sarah@example.com');

INSERT INTO blacklist VALUES 
  ('john@example.com'),
  ('sarah@example.com');

使用“Where not in”和两列

现在我们可以尝试使用“Where not in”和两列来过滤用户表中不在黑名单中的数据。为了实现这一点,我们需要引用用户表中的两列(姓名和电子邮件地址)以及黑名单表中的一列(电子邮件地址)。例如:

SELECT *
FROM users
WHERE (name, email) NOT IN (
  SELECT NULL, email
  FROM blacklist
)

请注意,我们在“Where not in”子句中使用了一个子查询。在子查询中,我们仅选择黑名单表中的电子邮件地址,因为我们不需要名称列。

此语句将返回以下结果:

+-------+-----------------+
| name  | email           |
+-------+-----------------+
| Mary  | mary@example.com|
+-------+-----------------+

结果是仅包含“Mary”的结果,因为该用户的电子邮件地址不在黑名单中。

(adsbygoogle = window.adsbygoogle || []).push({});

总结

在MySQL中使用“Where not in”和两个列过滤数据非常简单。只需将两个列包含在括号中,然后使用一个子查询选择不需要的列即可。这可以解决许多使用情况,例如过滤用户表中的重复数据或查找表中唯一的行。