SQL では、あるテーブルには存在するが別のテーブルには存在しない行を選択するには、「NOT IN」を使用します。オペレーター。ただし、このアプローチでは、大規模なデータセットのパフォーマンスの問題が発生することがあります。
同じ主キーを持つ 2 つのテーブル A と B があるシナリオを考えてみましょう。 B に存在しないすべての行を A から選択するには、次のクエリを使用できます。
<code class="sql">SELECT * FROM A WHERE NOT EXISTS ( SELECT * FROM B WHERE A.pk = B.pk );</code>
このクエリは機能しますが、特に大きなテーブルの場合は非効率的になる可能性があります。データベースは、A の各行に対してネストされたクエリを実行し、B 内の行の存在を確認する必要があります。
より良い方法は、左結合を使用し、NULL 値に基づいて結果をフィルターすることです。このメソッドでは、A と B を共通の列で結合し、B の対応する列が null である行を A から選択します。
<code class="sql">SELECT A.* FROM A LEFT JOIN B ON A.x = B.y WHERE B.y IS NULL;</code>
このクエリは、単一の結合操作を実行し、欠落に基づいて結果をフィルタリングします。 B の値を取得します。通常、大規模なデータセットの場合は、「NOT IN」アプローチより高速です。
代わりに、WHERE 句でサブクエリを使用できます。
<code class="sql">SELECT A.* FROM A WHERE x NOT IN ( SELECT y FROM B );</code>
このアプローチまた、大規模なデータセットに対して優れたパフォーマンスを提供することもできます。
最終的に、クエリを最適化する最適な方法は、特定のデータとデータベース構成によって異なります。さまざまなアプローチをテストし、クエリに最適なパフォーマンスを提供するアプローチを選択することをお勧めします。
以上があるテーブルから別のテーブルに存在しない行を効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。