如何查詢一個 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 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.