首页 >数据库 >mysql教程 >如何在处理 NULL 值的同时高效查询多个 MySQL 表以查找差异?

如何在处理 NULL 值的同时高效查询多个 MySQL 表以查找差异?

Linda Hamilton
Linda Hamilton原创
2024-12-27 02:34:09566浏览

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

MySQL“NOT IN”查询多个表

给定的 MySQL 查询旨在通过排除 Grade 中存在的行来识别 Grade 和评估表中数据之间的差异在评估中。但是,当在评估中找不到指定的名称(“JOHN”)时,原始查询无法检索任何结果。

理解“NOT IN”的问题

“NOT IN”如果涉及的任何列可能包含 NULL 值,则原始查询中使用的运算符就会出现问题。在 MySQL 中,NULL 代表未知或缺失值,它与某些运算符的交互可能会导致意外结果。

解决方案:避免“NOT IN”

要解决此问题,建议:处理可能包含 NULL 的列时避免使用“NOT IN”。相反,请考虑使用替代方法:

  • 显式联接: 不要使用 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,此查询可确保 Grade 中在评估中没有对应行的行仍将包含在输出中。

以上是如何在处理 NULL 值的同时高效查询多个 MySQL 表以查找差异?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn