指定された MySQL クエリは、存在する Grade から行を除外することで、Grade テーブルと Evaluation テーブル内のデータの不一致を特定しようとします。評価で。ただし、指定された名前 (「JOHN」) が評価で見つからない場合、元のクエリは結果を取得できません。
「NOT IN」元のクエリで使用されている演算子は、関連する列に NULL 値が含まれる可能性がある場合に問題になります。 MySQL では、NULL は未知の値または欠損値を表し、特定の演算子との相互作用により予期しない結果が生じる可能性があります。
この問題に対処するには、次のことをお勧めします。 NULL を含む可能性のある列を扱う場合は、「NOT IN」の使用を避けてください。代わりに、別のアプローチを使用することを検討してください。
次の変更されたクエリでは、 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 サイトの他の関連記事を参照してください。