给定的 MySQL 查询旨在通过排除 Grade 中存在的行来识别 Grade 和评估表中数据之间的差异在评估中。但是,当在评估中找不到指定的名称(“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,此查询可确保 Grade 中在评估中没有对应行的行仍将包含在输出中。
以上是如何在处理 NULL 值的同时高效查询多个 MySQL 表以查找差异?的详细内容。更多信息请关注PHP中文网其他相关文章!