首页 >数据库 >mysql教程 >如何查找一个表中不存在于另一个表中的记录?

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-22 18:47:11927浏览

How to Find Records in One Table That Don't Exist in Another?

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

在关系型数据库中,您可能需要查找一个表中不存在于另一个表中的记录。一个常见的例子是识别那些电话号码未在电话簿中注册的个人的来电记录。

考虑以下场景:

<code>电话簿 (Phone_book)
+----+------+--------------+
| id | name | phone_number |
+----+------+--------------+
| 1  | John | 111111111111 |
+----+------+--------------+
| 2  | Jane | 222222222222 |
+----+------+--------------+

来电记录 (Call)
+----+------+--------------+
| id | date | phone_number |
+----+------+--------------+
| 1  | 0945 | 111111111111 |
+----+------+--------------+
| 2  | 0950 | 222222222222 |
+----+------+--------------+
| 3  | 1045 | 333333333333 |
+----+------+--------------+</code>

要查找电话号码不在电话簿中的个人的来电记录,您可以采用多种方法:

方法一:使用 'NOT IN' 子查询

<code class="language-sql">SELECT *
FROM Call
WHERE phone_number NOT IN (SELECT phone_number FROM Phone_book)</code>

此查询直接检查 'Call' 表中的电话号码是否出现在 'Phone_book' 表中。如果没有,则选择相应的来电记录。

方法二:使用 'NOT EXISTS' 子查询

<code class="language-sql">SELECT *
FROM Call
WHERE NOT EXISTS
(SELECT *
FROM Phone_book
WHERE Phone_book.phone_number = Call.phone_number)</code>

与 'NOT IN' 子查询类似,此方法使用 'NOT EXISTS' 子查询来检查 'Phone_book' 表中是否存在匹配的电话号码。

方法三:使用 'LEFT OUTER JOIN'

<code class="language-sql">SELECT * 
FROM Call
LEFT OUTER JOIN Phone_Book
ON (Call.phone_number = Phone_book.phone_number)
WHERE Phone_book.phone_number IS NULL</code>

此方法使用 'LEFT OUTER JOIN' 来检索所有来电记录,然后通过检查 'Phone_book.phone_number' 列中的 NULL 值来过滤掉在 'Phone_book' 表中具有匹配电话号码的记录。

以上是如何查找一个表中不存在于另一个表中的记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn