<!–
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”和两个列过滤数据非常简单。只需将两个列包含在括号中,然后使用一个子查询选择不需要的列即可。这可以解决许多使用情况,例如过滤用户表中的重复数据或查找表中唯一的行。