Maison >base de données >tutoriel mysql >Comment appliquer correctement le filtrage de clause WHERE dans les requêtes SQL complexes ?

Comment appliquer correctement le filtrage de clause WHERE dans les requêtes SQL complexes ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-19 10:16:091000parcourir

How to Correctly Apply WHERE Clause Filtering in Complex SQL Queries?

Problème de priorité du paramètre WHERE dans l'instruction SQL

La requête SQL suivante est conçue pour récupérer les données de la table "people" et limiter les résultats aux enregistrements avec "university=2" :

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

Cependant, cette requête a produit des résultats inattendus au-delà de la condition « university=2 ». Pour résoudre ce problème, nous devons nous assurer que la condition « université=2 » limite strictement les résultats de la recherche.

Ajustez les crochets pour contrôler l'ordre des opérations

Le problème avec cette requête est l'utilisation inappropriée des parenthèses, qui affecte l'ordre d'évaluation de l'expression. Dans la requête d'origine, « AND » a une priorité plus élevée que « OR », ce qui signifie qu'il est évalué en premier. Par conséquent, "university=2" est uniquement combiné avec "MATCH (lname,fname) AGAINST ('massive' IN BOOLEAN MODE)" et non avec le test "fname/lname".

Pour corriger cela, nous devons ajuster les parenthèses pour garantir que "university=2" soit combiné avec l'ensemble des critères de recherche :

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

Avec cet ajustement, la condition « université=2 » est désormais mise entre parenthèses, indiquant qu'elle doit être évaluée en premier puis combinée avec les conditions de recherche dans le deuxième jeu de parenthèses. Cela garantit que seuls les enregistrements pour lesquels « university=2 » est vrai seront pris en compte dans la recherche.

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