2 つのテーブル間で欠落している IP アドレスを見つけるにはどうすればよいですか?
Jan 23, 2025 pm 10:08 PM欠落している IP アドレスの検索: SQL 比較
シナリオ:
login_log
と ip_location
という 2 つのテーブルがあります。 目標は、login_log
に記録されている、 に存在しない のすべての IP アドレスを識別することです。ip_location
SQL ソリューション:
いくつかの SQL アプローチでこれを実現できます。 3 つの一般的な方法を調べてみましょう:
-
サブクエリ:
NOT EXISTS
このメソッドは一般に効率的で、幅広い互換性があります。このクエリは、SELECT ip FROM login_log WHERE NOT EXISTS ( SELECT 1 FROM ip_location WHERE login_log.ip = ip_location.ip );
ログイン後にコピーの各 IP アドレスが
login_log
に対応するエントリがあるかどうかを確認します。一致するものが見つからない場合は、IP アドレスが結果に含まれます。 多くの場合、サブクエリではip_location
の方がSELECT 1
より効率的であることに注意してください。SELECT ip
と
LEFT JOIN
チェック:NULL
このアプローチでは、 を使用してテーブルを結合し、LEFT JOIN
のip
列がip_location
である行をフィルターします。 IP アドレスがありません。NULL
SELECT l.ip FROM login_log l LEFT JOIN ip_location i ON l.ip = i.ip WHERE i.ip IS NULL;
ログイン後にコピー(または一部のデータベースでは
EXCEPT
):MINUS
このセットベースの操作は、2 つのテーブル内の IP アドレス間の違いを直接見つけます。 構文は、特定のデータベース システム (Oracle の など) に応じて若干異なる場合があることに注意してください。MINUS
SELECT ip FROM login_log EXCEPT SELECT ip FROM ip_location;
ログイン後にコピー
パフォーマンスに関する考慮事項:
最適な方法は、データベース システム、テーブル サイズ、インデックス作成によって異なります。 は PostgreSQL で良好なパフォーマンスを発揮することがよくありますが、NOT EXISTS
は他のシステムでも効率的です。 LEFT JOIN
は簡潔にできますが、常に最速であるとは限りません。 特に大規模なデータセットの場合、大幅に時間がかかる可能性があるため、サブクエリでは EXCEPT
を使用しないでください。 両方のテーブルの NOT IN
列に適切なインデックスを作成することは、あらゆる場合のパフォーマンスにとって重要です。ip
以上が2 つのテーブル間で欠落している IP アドレスを見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか?

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし)

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド

共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか?

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか?
