首頁 > 資料庫 > mysql教程 > 為什麼我的 SQL WHERE 子句忽略參數?

為什麼我的 SQL WHERE 子句忽略參數?

DDD
發布: 2025-01-19 10:06:10
原創
402 人瀏覽過

Why Does My SQL WHERE Clause Ignore a Parameter?

SQL WHERE 子句故障排除:為什麼參數被忽略

SQL 查詢有時會產生意外結果,特別是當 WHERE 子句包含多個條件時。 這通常源自於不正確的運算子優先順序和分組。

讓我們檢查一下 WHERE 子句似乎忽略參數的場景:

SELECT * FROM people
WHERE
  university='2'
  AND MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE)
  OR (fname LIKE '%box%' OR lname LIKE '%box%')
登入後複製

此查詢旨在從people 表中選擇記錄,其中university 為「2」並且對「大量」匹配的全文搜尋第一個或姓氏包含“box”。 但是,結果集可能包含不滿足 university='2' 條件的條目。

問題在於 SQL 的運算子優先權:AND 優先於 OR。 查詢的隱式分組是:

(university='2') AND (
  (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE))
  OR (fname LIKE '%box%' OR lname LIKE '%box%')
)
登入後複製

請注意 university='2' 僅適用於全文搜尋。 為了修正這個問題,我們需要明確括號來確保 AND 條件適用於所有部分:

SELECT * FROM people
WHERE
  (university='2')
  AND (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE)
       OR fname LIKE '%box%'
       OR lname LIKE '%box%')
登入後複製

透過將所有條件分組在括號內,我們強制執行預期的邏輯,確保只傳回滿足所有指定條件的記錄。 這凸顯了在 SQL 中建構複雜 WHERE 子句時仔細使用括號的重要性。

以上是為什麼我的 SQL WHERE 子句忽略參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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