Maison >base de données >tutoriel mysql >Pourquoi ma clause SQL WHERE ignore-t-elle un paramètre ?
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 people
où university
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!