ホームページ >データベース >mysql チュートリアル >あるテーブルで別のテーブルに存在しないレコードを見つけるにはどうすればよいですか?

あるテーブルで別のテーブルに存在しないレコードを見つけるにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-22 18:47:11928ブラウズ

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>

電話帳に電話番号が載っていない個人の通話記録を検索するには、いくつかの方法を使用できます。

方法 1: 'NOT IN' サブクエリを使用する

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

このクエリは、「Call」テーブルの電話番号が「Phone_book」テーブルに表示されるかどうかを直接チェックします。そうでない場合は、対応する通話記録を選択します。

方法 2: '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」テーブルに存在するかどうかを確認します。

方法 3: '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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。