Maison > base de données > tutoriel mysql > Quand dois-je utiliser ANY au lieu de IN dans une clause WHERE ?

Quand dois-je utiliser ANY au lieu de IN dans une clause WHERE ?

Linda Hamilton
Libérer: 2025-01-14 20:37:44
original
249 Les gens l'ont consulté

When Should I Use ANY Instead of IN in a WHERE Clause?

Comment utiliser ANY au lieu de IN dans la clause WHERE

Supposons que vous ayez une requête comme MyModel.where(id: ids) dans Rails qui génère du SQL en utilisant IN contenant une liste d'identifiants :

<code class="language-sql">SELECT "my_models".* FROM "my_models"
WHERE  "my_models".`"id"` IN (1, 28, 7, 8, 12)</code>
Copier après la connexion

Pour utiliser ANY au lieu de IN, vous pouvez essayer :

<code class="language-ruby">MyModel.where("id = ANY(VALUES(#{ids.join '),('}))")</code>
Copier après la connexion

Cependant, lorsque le tableau ids est vide, cette approche échoue et entraîne une erreur de syntaxe SQL.

Comprendre IN et ANY

Les expressions IN et ANY ont deux formes :

  • expression IN (subquery)
  • expression IN (value [, ...]) ou expression ANY (array expression)

Pour la deuxième forme, IN attend une liste de valeurs, tandis que ANY attend un tableau.

Quand utiliser ANY et IN

ANY est une option plus générale qui peut être utilisée avec n'importe quel opérateur renvoyant une valeur booléenne. IN est un cas particulier de ANY.

En termes de performances, ANY n'est jamais plus rapide que = ANY, et = ANY n'est pas beaucoup plus rapide que IN. Le choix doit être basé sur la commodité.

Si l'ID provient d'une base de données, il est plus efficace d'utiliser une sous-requête ou JOIN. Pour de meilleures performances lors de la transmission de longues listes de valeurs du client, envisagez d'utiliser des tableaux, des expressions unnest() ou VALUES.

= Syntaxe de ANY

Postgres accepte les formes suivantes d'expressions de tableau :

  • Constructeur de tableau : ARRAY[1,2,3]
  • Tableau littéral : {1,2,3}

Pour éviter la conversion de type, convertissez le tableau explicitement : ARRAY[1,2,3]::numeric[].

Comment transmettre un tableau depuis Ruby

Supposons que id soit un entier :

<code class="language-ruby">MyModel.where('id = ANY(ARRAY[?]::int[])', ids.map { |i| i})</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal