如何查找一个 MySQL 表中不存在于另一个表中的记录?


为了查找一个 MySQL 表中不存在于另一个表中的记录,我们可以使用不包含这些记录的表的子查询。通过以下步骤可以更好地理解这一点:

首先,使用 create 命令创建一个表。表名为 'PresentHistory',它有两个列。如下所示:

mysql> CREATE table PresentHistory
-> (
-> HisID int,
-> HisName varchar(100)
-> );
Query OK, 0 rows affected (0.54 sec)

创建表后,插入一些记录,这些记录也将在第二个表中存在。这可以通过 insert 命令完成,如下所示:

mysql> INSERT into PresentHistory values(1,'John');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT into PresentHistory values(2,'Bob');
Query OK, 1 row affected (0.15 sec)

成功插入记录后,使用 select 语句显示它们,如下所示:

mysql> SELECT * from PresentHistory;

执行上述查询后,获得的输出为。

+-------+---------+
| HisID | HisName |
+-------+---------+
| 1     | John    |
| 2     | Bob     |
+-------+---------+
2 rows in set (0.00 sec)

现在,使用 create 命令创建一个第二个表。该表名为 'PastHistory',包含两个列,如下所示。

mysql> CREATE table PastHistory
-> (
-> PastId int,
-> PastName varchar(100)
-> );
Query OK, 0 rows affected (0.74 sec)

创建表后,在 PastHistory 表中插入一些存在于第一个表中的记录和一些不存在于第一个表中的记录。

mysql> INSERT into PastHistory values(1,'John');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT into PastHistory values(2,'Bob');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT into PastHistory values(3,'Carol');
Query OK, 1 row affected (0.17 sec)

mysql> INSERT into PastHistory values(4,'Jason');
Query OK, 1 row affected (0.16 sec)

现在,第二个表中有 4 条记录。其中,2 条记录来自第一个表,2 条记录在第二个表中是不同的。

使用 select 语句查看第二个表中的记录,如下所示:

mysql> SELECT * from PastHistory;

上述查询的输出为

+--------+----------+
| PastId | PastName |
+--------+----------+
| 1      | John     |
| 2      | Bob      |
| 3      | Carol    |
| 4      | Jason    |
+--------+----------+
4 rows in set (0.00 sec)

检查一个表中不存在于第二个表中的记录的语法如下:

SELECT * from yourSecondTableName where columnNamefromSecondtable NOT IN
(SELECT columnNamefromfirsttable from yourFirstTableName);

给定的查询用于获取第二个表中不同的记录:

mysql> SELECT * from PastHistory where PastName not in (select HisName from
PresentHistory);

上述查询的输出如下:

+--------+----------+
| PastId | PastName |
+--------+----------+
| 3      | Carol    |
| 4      | Jason    |
+--------+----------+
2 rows in set (0.00 sec)

从以上输出可以清楚地看到,我们找到了两条不存在于第一个表中的记录。

更新于: 2020年6月24日

707 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告