ホームページ  >  記事  >  データベース  >  SQL を使用して欠落している従業員レコードを効率的に取得するにはどうすればよいですか?

SQL を使用して欠落している従業員レコードを効率的に取得するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-26 20:31:10620ブラウズ

How to Efficiently Retrieve Missing Employee Records Using SQL?

「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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。