La requête MySQL WHERE IN () ne renvoie pas les résultats attendus
Dans MySQL, l'instruction WHERE IN () est couramment utilisée pour récupérer des enregistrements en fonction sur un ensemble de valeurs spécifiées. Cependant, les utilisateurs rencontrent parfois des situations dans lesquelles les lignes attendues ne sont pas renvoyées dans les résultats.
Description du problème :
Un utilisateur a une requête qui sélectionne toutes les lignes de la "table " table où la colonne "id" se trouve dans une liste spécifiée :
<code class="sql">SELECT * FROM table WHERE id IN (1,2,3,4);</code>
L'utilisateur a noté que lorsqu'un enregistrement a plusieurs valeurs "id" (par exemple, 1 et 3), il n'est pas renvoyé dans les résultats.
Comprendre le problème :
L'instruction WHERE IN () traduit la liste de valeurs fournie en une série d'opérateurs 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 dont la colonne « id » correspond exactement à l'une des valeurs spécifiées seront renvoyées.
Solution 1 : Utiliser FIND_IN_SET
One L'approche pour surmonter cette limitation consiste à modifier la structure des données en changeant le type de données de la colonne "id" en SET. Cela permet à la colonne de stocker plusieurs valeurs.
À l'aide de la fonction FIND_IN_SET, vous pouvez ensuite rechercher des enregistrements où une valeur spécifique est présente dans le SET :
<code class="sql">SELECT * FROM table WHERE FIND_IN_SET('1', id);</code>
Cependant, il est important de notez que cette solution entraîne une complexité supplémentaire et peut ne pas convenir à tous les scénarios.
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!