ホームページ >データベース >mysql チュートリアル >あるテーブルで別のテーブルに存在しないレコードを見つけるにはどうすればよいですか?
あるテーブルで、別のテーブルに存在しないレコードを検索するにはどうすればよいですか?
リレーショナル データベースでは、あるテーブルで別のテーブルに存在しないレコードを検索する必要がある場合があります。一般的な例としては、電話帳に電話番号が登録されていない個人の通話記録を特定することが挙げられます。
次のシナリオを考えてみましょう:
<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 サイトの他の関連記事を参照してください。