Requête SQL où id =… ou id =… ou id =… etc [fermé]

Clôturé. Cette question est hors sujet . Il naccepte pas les réponses actuellement.

Commentaires

  • Sil y a vraiment 800 clauses where, je pense que vous devriez travailler sur votre application

Réponse

La façon décrire cette requête est:

SELECT * FROM member_copy WHERE id IN (17579, 17580, 17582); 

Cependant, la vraie question est, où doù vient cette liste de id? Si la liste des id est le résultat dune autre requête de base de données, alors vous devriez faire une sous-sélection ou une jointure à la place.

Commentaires

  • a parfaitement fonctionné. Ce nétait pas à partir dune requête de base de données, quelquun est passé par là et a choisi chaque numéro. Je ne les envie pas.

Réponse

Un test avec EXPLAIN ANALYZE VERBOSE vous montrera que le formulaire avec id IN (...) dans la réponse de @ 200_success est transformé en interne en:

SELECT * FROM member_copy WHERE id = ANY ("{17579, 17580, 17582}"); 

.. qui fonctionne donc légèrement plus vite au début (aucune conversion nécessaire).

De plus, le formulaire de votre question fonctionnera efficacement très similaire.

Avec de grandes listes, désemboîter un tableau , suivi dun JOIN sera généralement plus rapide :

SELECT m.* FROM unnest("{17579, 17580, 17582}"::int[]) id JOIN member_copy m USING (id); 

Puisque la liste est is the result of another database query, il sera plus rapide de combiner les deux en un avec une JOIN.

Explication plus détaillée:

Réponse

Pour un identifiant unique, la requête suivante a fonctionné pour moi:

SELECT * FROM member_copy WHERE id IN ("17579"); 

Commentaires

  • Pourriez-vous expliquer comment cela répond au PO?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *