Maison >base de données >tutoriel mysql >Pourquoi ma clause SQL WHERE ignore-t-elle un paramètre ?

Pourquoi ma clause SQL WHERE ignore-t-elle un paramètre ?

DDD
DDDoriginal
2025-01-19 10:06:10357parcourir

Why Does My SQL WHERE Clause Ignore a Parameter?

Dépannage des clauses SQL WHERE : pourquoi les paramètres sont ignorés

Les requêtes SQL peuvent parfois produire des résultats inattendus, notamment lorsque la clause WHERE intègre plusieurs conditions. Cela provient souvent d'une priorité et d'un regroupement des opérateurs incorrects.

Examinons un scénario dans lequel une clause WHERE semble ignorer un paramètre :

<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>

Cette requête vise à sélectionner des enregistrements de la table peopleuniversity vaut '2' et une recherche en texte intégral des correspondances 'massives' ou la première ou le nom de famille contient « boîte ». Cependant, l'ensemble de résultats peut inclure des entrées qui ne satisfont pas à la university='2' condition.

Le problème réside dans la priorité des opérateurs SQL : AND a priorité sur OR. Le regroupement implicite de la requête est :

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

Remarquez que university='2' ne s'applique qu'à la recherche en texte intégral. Pour corriger cela, nous avons besoin de parenthèses explicites pour garantir que la condition AND s'applique à toutes les pièces :

<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>

En regroupant toutes les conditions entre parenthèses, nous appliquons la logique prévue, garantissant que seuls les enregistrements répondant à tous les critères spécifiés sont renvoyés. Cela souligne l'importance d'une utilisation prudente des parenthèses lors de la construction de clauses WHERE complexes en SQL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn