ホームページ > データベース > mysql チュートリアル > 2 つのテーブル間で欠落している IP アドレスを見つけるにはどうすればよいですか?

2 つのテーブル間で欠落している IP アドレスを見つけるにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-23 22:08:09
オリジナル
651 人が閲覧しました

How to Find Missing IP Addresses Between Two Tables?

欠落している IP アドレスの検索: SQL 比較

シナリオ:

login_logip_location という 2 つのテーブルがあります。 目標は、login_log に記録されている、 に存在しない のすべての IP アドレスを識別することです。ip_location

SQL ソリューション:

いくつかの SQL アプローチでこれを実現できます。 3 つの一般的な方法を調べてみましょう:

  1. サブクエリ:NOT EXISTS このメソッドは一般に効率的で、幅広い互換性があります。

    <code class="language-sql">SELECT ip
    FROM login_log
    WHERE NOT EXISTS (
        SELECT 1
        FROM ip_location
        WHERE login_log.ip = ip_location.ip
    );</code>
    ログイン後にコピー
    このクエリは、

    の各 IP アドレスが login_log に対応するエントリがあるかどうかを確認します。一致するものが見つからない場合は、IP アドレスが結果に含まれます。 多くの場合、サブクエリでは ip_location の方が SELECT 1 より効率的であることに注意してください。SELECT ip

  2. LEFT JOIN チェック:NULL このアプローチでは、 を使用してテーブルを結合し、LEFT JOINip 列が ip_location である行をフィルターします。 IP アドレスがありません。NULL

    <code class="language-sql">SELECT l.ip
    FROM login_log l
    LEFT JOIN ip_location i ON l.ip = i.ip
    WHERE i.ip IS NULL;</code>
    ログイン後にコピー
  3. (または一部のデータベースでは EXCEPT):MINUS このセットベースの操作は、2 つのテーブル内の IP アドレス間の違いを直接見つけます。 構文は、特定のデータベース システム (Oracle の など) に応じて若干異なる場合があることに注意してください。MINUS

    <code class="language-sql">SELECT ip FROM login_log
    EXCEPT
    SELECT ip FROM ip_location;</code>
    ログイン後にコピー

パフォーマンスに関する考慮事項:

最適な方法は、データベース システム、テーブル サイズ、インデックス作成によって異なります。

は PostgreSQL で良好なパフォーマンスを発揮することがよくありますが、NOT EXISTS は他のシステムでも効率的です。 LEFT JOIN は簡潔にできますが、常に最速であるとは限りません。 特に大規模なデータセットの場合、大幅に時間がかかる可能性があるため、サブクエリでは EXCEPT を使用しないでください。 両方のテーブルの NOT IN 列に適切なインデックスを作成することは、あらゆる場合のパフォーマンスにとって重要です。ip

以上が2 つのテーブル間で欠落している IP アドレスを見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート