从一个 MySQL 表中查找在另一个表中不存在的记录?

要从一个 MySQL 表中查找另一个表中不存在的记录,我们可以对没有记录的表使用子查询。使用给定的步骤可以更好地理解这一点 -

首先使用 create 命令创建一个表。表名是“PresentHistory”,它有两列。这给出如下 -

mysql> CREATE table PresentHistory
-> (
-> HisID int,
-> HisName varchar(100)
-> );

创建表后,将插入一些记录,这些记录也将出现在第二个表中。这是在插入命令的帮助下完成的,如下所示 -

mysql> INSERT into PresentHistory values(1,'John');

mysql> INSERT into PresentHistory values(2,'Bob');

成功插入记录后,它们将与 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)
-> );

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

mysql> INSERT into PastHistory values(1,'John');

mysql> INSERT into PastHistory values(2,'Bob');

mysql> INSERT into PastHistory values(3,'Carol');

mysql> INSERT into PastHistory values(4,'Jason');

现在,第二个表中有 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)

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