首頁 > 資料庫 > mysql教程 > 如何在處理 NULL 值的同時高效查詢多個 MySQL 表以查找差異?

如何在處理 NULL 值的同時高效查詢多個 MySQL 表以查找差異?

Linda Hamilton
發布: 2024-12-27 02:34:09
原創
562 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板