Maison >base de données >tutoriel mysql >Pourquoi mon MySQL WHERE IN interroge-t-il des lignes manquantes avec plusieurs valeurs correspondantes ?
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!