テーブル B から除外されるテーブル A の行を効率的に選択する
同じ主キーを共有する 2 つのテーブル (A と B) を扱う場合、一般的なタスクは、A には存在するが B には存在しないすべての行を抽出することです。「NOT EXISTS」句の使用などの既存のソリューションでは、パフォーマンスの問題が発生する可能性があります。
効率を向上させるには、左結合アプローチ。左結合ベースのソリューションの構文は次のとおりです。
SELECT * FROM A LEFT JOIN B ON A.x = B.y WHERE B.y IS NULL;
このアプローチでは、テーブル A の各行とテーブル B の対応する行を、共通フィールド "x" に基づいて結合することによって比較します (次のように仮定します)。それは存在します)。 "WHERE" 句が "B.y" が NULL (一致しないことを示す) である行を除外するため、テーブル B に一致する行がないテーブル A の行が返されます。
または、次の構文も使用できます。同じ結果を得るために使用できます。
SELECT A.* FROM A LEFT JOIN B ON A.x = B.y WHERE B.y IS NULL;
この構文は、テーブル A から列のみを明示的に選択し、不要なデータが取得されないようにします。
一般に、左結合アプローチは、これは、「NOT EXISTS」句と比較して、「テーブルにない場所を選択」操作を実行する効率的な方法です。具体的なパフォーマンスの向上はデータのサイズと構造によって異なりますが、特にテーブル B の行数がテーブル A よりも大幅に少ない場合、左結合は代替結合よりもパフォーマンスが向上する傾向があります。
以上がテーブル B にない行をテーブル A から効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。