ホームページ > データベース > mysql チュートリアル > NULL 値の処理中に複数の MySQL テーブルに効率的にクエリを実行して不一致を見つけるにはどうすればよいですか?

NULL 値の処理中に複数の MySQL テーブルに効率的にクエリを実行して不一致を見つけるにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-27 02:34:09
オリジナル
565 人が閲覧しました

How to Efficiently Query Multiple MySQL Tables to Find Discrepancies While Handling NULL Values?

MySQL "NOT IN" Querying Multiple Tables

指定された MySQL クエリは、存在する Grade から行を除外することで、Grade テーブルと Evaluation テーブル内のデータの不一致を特定しようとします。評価で。ただし、指定された名前 (「JOHN」) が評価で見つからない場合、元のクエリは結果を取得できません。

「NOT IN」の問題について

「NOT IN」元のクエリで使用されている演算子は、関連する列に NULL 値が含まれる可能性がある場合に問題になります。 MySQL では、NULL は未知の値または欠損値を表し、特定の演算子との相互作用により予期しない結果が生じる可能性があります。

解決策: "NOT IN" を回避する

この問題に対処するには、次のことをお勧めします。 NULL を含む可能性のある列を扱う場合は、「NOT IN」の使用を避けてください。代わりに、別のアプローチを使用することを検討してください。

  • EXPLICIT JOINS: テーブルの結合に WHERE 句を使用する代わりに、JOIN ステートメントを使用して結合を明示的に指定します。これにより、より正確で予測可能な結果が得られます。
  • NOT EXISTS SUBQUERY: ネストされた NOT EXISTS サブクエリを使用して、あるテーブルに存在する行のうち、別のテーブルに存在しない行が存在するかどうかを確認します。

例: NOT EXISTS の使用

次の変更されたクエリでは、 NOT EXISTS を使用すると、目的の結果が得られます:

SELECT
  G.ID_Courses,
  C.ID_Courses,
  G.NAME,
  C.NAME,
  G.ID_Courses,
  E.NAME,
  E.Year,
  G.Year
FROM Grade AS G
INNER JOIN Course AS C
  ON G.ID_Courses = C.ID_Courses
LEFT JOIN Evaluation AS E
  ON G.NAME = E.NAME AND G.Year = E.Year
WHERE
  NOT EXISTS(
    SELECT
      1
    FROM Evaluation
    WHERE
      NAME = G.NAME AND Year = G.Year
  )
  AND G.NAME = 'JOHN'
  AND G.Year = 1
GROUP BY
  G.ID_Courses;
ログイン後にコピー

NOT EXISTS を使用すると、このクエリでは、Evaluation に対応する行がない Grade の行も出力に含まれるようになります。

以上がNULL 値の処理中に複数の MySQL テーブルに効率的にクエリを実行して不一致を見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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