Heim >Datenbank >MySQL-Tutorial >Warum ignoriert meine SQL-WHERE-Klausel einen Parameter?
Fehlerbehebung bei SQL-WHERE-Klauseln: Warum Parameter ignoriert werden
SQL-Abfragen können manchmal zu unerwarteten Ergebnissen führen, insbesondere wenn die WHERE
-Klausel mehrere Bedingungen enthält. Dies ist häufig auf eine falsche Priorität und Gruppierung der Operatoren zurückzuführen.
Untersuchen wir ein Szenario, in dem eine WHERE
-Klausel scheinbar einen Parameter ignoriert:
<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>
Diese Abfrage zielt darauf ab, Datensätze aus der people
-Tabelle auszuwählen, wobei university
„2“ ist und eine Volltextsuche nach „massiven“ Übereinstimmungen oder dem ersten oder Nachname enthält „Box“. Allerdings kann die Ergebnismenge Einträge enthalten, die die university='2'
-Bedingung.
Das Problem liegt in der Operatorpriorität von SQL: AND
hat Vorrang vor OR
. Die implizite Gruppierung der Abfrage lautet:
<code class="language-sql">(university='2') AND ( (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE)) OR (fname LIKE '%box%' OR lname LIKE '%box%') )</code>
Beachten Sie, dass university='2'
nur für die Volltextsuche gilt. Um dies zu korrigieren, benötigen wir explizite Klammern, um sicherzustellen, dass die AND
-Bedingung für alle Teile gilt:
<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>
Durch die Gruppierung aller Bedingungen in Klammern erzwingen wir die beabsichtigte Logik und stellen sicher, dass nur Datensätze zurückgegeben werden, die alle angegebenen Kriterien erfüllen. Dies unterstreicht die Bedeutung einer sorgfältigen Verwendung von Klammern beim Erstellen komplexer WHERE
-Klauseln in SQL.
Das obige ist der detaillierte Inhalt vonWarum ignoriert meine SQL-WHERE-Klausel einen Parameter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!