SQL 查詢中「NOT IN」的危險
當嘗試檢查一個表格中的資料是否在另一個表格中不存在時,「NOT IN」運算子可能會導致意外結果,尤其是在處理空值時。
問題與「NOT IN」
在提供的查詢中,「NOT IN」子句將子查詢的結果與「Grade」表中的「ID_Courses ”列進行比較:
如果子查詢傳回任何空值,「NOT IN」子句將計算為false,即使指定的「JOHN」記錄的「Year」為 1存在於「等級」表中。這是因為 SQL 中的三值邏輯將 null 解釋為“未知”,從而導致計算錯誤。
「NOT IN」的替代方案
避免此問題,建議使用替代方法,例如NOT EXISTS 或明確連接:
NOT EXISTS
明確聯接
透過使用這些替代方案,您可以確保查詢準確識別指定資料不存在的記錄存在於另一個表中,無論是否存在空值。
以上是為什麼在 SQL 查詢中使用 NOT EXISTS 或明確連接而不是 NOT IN?的詳細內容。更多資訊請關注PHP中文網其他相關文章!