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

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

DDD
DDD原創
2025-01-19 10:06:10389瀏覽

Why Does My SQL WHERE Clause Ignore a Parameter?

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

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

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

<code class="language-sql">SELECT * FROM people
WHERE
  university='2'
  AND MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE)
  OR (fname LIKE '%box%' OR lname LIKE '%box%')</code>

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

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

<code class="language-sql">(university='2') AND (
  (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE))
  OR (fname LIKE '%box%' OR lname LIKE '%box%')
)</code>

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

<code class="language-sql">SELECT * FROM people
WHERE
  (university='2')
  AND (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE)
       OR fname LIKE '%box%'
       OR lname LIKE '%box%')</code>

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

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn