Heim >Datenbank >MySQL-Tutorial >Warum ignoriert meine SQL-WHERE-Klausel einen Parameter?

Warum ignoriert meine SQL-WHERE-Klausel einen Parameter?

DDD
DDDOriginal
2025-01-19 10:06:10357Durchsuche

Why Does My SQL WHERE Clause Ignore a 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.

nicht erfüllen

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn