Query SQL dove id =… o id =… o id =… ecc [chiuso]

Chiusa. Questa domanda è fuori tema . Attualmente non accetta risposte.

Commenti

  • Se ci sono davvero 800 clausole where penso che dovresti lavorare sulla tua applicazione

Risposta

Il modo di scrivere questa query è:

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

Tuttavia, la vera domanda è: dove da cui proviene lelenco di id? Se lelenco di id è il risultato di unaltra query sul database, dovresti invece eseguire una sottoselezione o un join.

Commenti

  • Ha funzionato perfettamente. Non proveniva da una query di database, qualcuno ha effettivamente esaminato e scelto ogni numero. Non li invidio.

Rispondi

Un test con EXPLAIN ANALYZE VERBOSE ti mostrerà che il modulo con id IN (...) nella risposta di @ 200_success viene trasformato internamente in:

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

.. che quindi è leggermente più veloce allinizio (nessuna conversione necessaria).

Inoltre, il modulo nella tua domanda funzionerà efficacemente molto simile.

Con elenchi grandi, senza test di un array , seguito da un JOIN sarà generalmente più veloce :

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

Poiché lelenco è is the result of another database query, sarà più veloce combinare entrambi in uno query con JOIN.

Spiegazione più dettagliata:

Risposta

Per un singolo id la seguente query ha funzionato per me:

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

Commenti

  • Potresti spiegare come questo risponde allOP?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *