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
Libérer: 2025-01-19 10:06:10
original
441 Les gens l'ont consulté

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 :

SELECT * FROM people
WHERE
  university='2'
  AND MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE)
  OR (fname LIKE '%box%' OR lname LIKE '%box%')
Copier après la connexion

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 :

(university='2') AND (
  (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE))
  OR (fname LIKE '%box%' OR lname LIKE '%box%')
)
Copier après la connexion

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 :

SELECT * FROM people
WHERE
  (university='2')
  AND (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE)
       OR fname LIKE '%box%'
       OR lname LIKE '%box%')
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal