給定的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中文網其他相關文章!