Maison  >  Article  >  base de données  >  Pourquoi mon MySQL WHERE IN interroge-t-il des lignes manquantes avec plusieurs valeurs correspondantes ?

Pourquoi mon MySQL WHERE IN interroge-t-il des lignes manquantes avec plusieurs valeurs correspondantes ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-05 20:29:02402parcourir

Why Does My MySQL WHERE IN Query Miss Rows with Multiple Matching Values?

MySQL WHERE IN Requête pour plusieurs valeurs correspondantes

Lors de la tentative de récupération de données d'une table MySQL à l'aide de la clause WHERE IN () pour faire correspondre plusieurs valeurs, vous pouvez rencontrer un problème où les lignes avec plusieurs valeurs correspondantes ne sont pas renvoyées. Ce comportement peut prêter à confusion, car vous pouvez vous attendre à ce que toutes les lignes contenant l'une des valeurs spécifiées soient renvoyées.

Explication

La clause WHERE IN () est utilisée pour sélectionnez les lignes selon que les valeurs de leurs colonnes désignées correspondent à l'une des valeurs fournies entre parenthèses. Cependant, lorsqu'une ligne a plusieurs valeurs correspondantes, telles que 1 et 3, la requête se traduit par une série de conditions OR :

<code class="sql">SELECT * FROM table WHERE id='1' OR id='2' OR id='3' OR id='4';</code>

Cela signifie que seules les lignes qui correspondent exactement à l'une des valeurs spécifiées seront être renvoyé.

Solution

Pour résoudre ce problème, vous pouvez envisager les méthodes suivantes :

Méthode 1 : Utilisation du type de données SET

Changer le type de données de la colonne id en SET vous permet de stocker plusieurs valeurs sur une seule ligne. Vous pouvez ensuite utiliser la fonction FIND_IN_SET() pour rechercher des lignes contenant des valeurs spécifiques :

<code class="sql">SELECT * FROM table WHERE FIND_IN_SET('1', id);</code>

Cette requête renverra toutes les lignes dont la colonne id contient la valeur « 1 », quelle que soit la présence d'autres valeurs.

Méthode 2 : Utiliser UNION ou une sous-requête

Une approche alternative consiste à utiliser une UNION ou une sous-requête pour combiner plusieurs requêtes, chacune correspondant à l'une des valeurs spécifiées :

<code class="sql">SELECT * FROM table WHERE id = 1
UNION
SELECT * FROM table WHERE id = 3;</code>

Cette requête renverra toutes les lignes qui correspondent à 1 ou 3, quelle que soit la présence d'autres valeurs.

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