「SELECT * WHERE NOT EXISTS」を使用した欠落データの取得
ユーザーは、特定の場所にある「employees」テーブルからすべてのレコードを抽出しようとしています。セルが「eotm_dyn」テーブルに存在しません。これを達成するために、ユーザーは次のクエリを使用します:
SELECT * from employees WHERE NOT EXISTS (SELECT name FROM eotm_dyn)
しかし、約 20 の名前が欠落していることがわかっているにもかかわらず、このクエリでは一貫して結果が得られません。
問題の理解
エラーは、クエリ内の 2 つのテーブルの結合に失敗していることにあります。現状では、クエリは「employees」テーブルを参照せずに、「eotm_dyn」テーブル内の名前の存在を単に評価します。 「eotm_dyn」テーブルが空でない限り、これは常に false を返します。
解決策: テーブルの結合
テーブルを結合して欠落している名前を除外するには、次のようなクエリ:
SELECT * FROM employees e WHERE NOT EXISTS ( SELECT null FROM eotm_dyn d WHERE d.employeeID = e.id )
この変更されたクエリでは、LEFT JOIN が暗黙的に共通の「employeeID」フィールドに基づく「employees」テーブルと「eotm_dyn」テーブル。次に、WHERE 句は NOT EXISTS を使用して、名前 (または従業員 ID) が「eotm_dyn」テーブルに存在しない従業員レコードをフィルタリングします。
代替アプローチ: LEFT JOIN と NULL 値のフィルタリング
あるいは、LEFT JOIN を使用して NULL 値をフィルタリングして除外することもできます。
SELECT * FROM employees e LEFT JOIN eotm_dyn d ON e.employeeID = d.employeeID WHERE d.name IS NULL
このアプローチは NOT EXISTS を使用するよりも効率が悪いかもしれませんが、欠落したデータを取得する簡単な方法を提供します。
以上がSQL を使用して欠落している従業員レコードを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。