SQL-Abfrage mit id =… oder id =… oder id =… usw. [geschlossen]

geschlossen. Diese Frage ist nicht zum Thema . Derzeit werden keine Antworten akzeptiert.

Kommentare

  • Wenn es wirklich 800 where-Klauseln gibt, sollten Sie meiner Meinung nach an Ihrer Anwendung arbeiten.

Antwort

Diese Abfrage kann folgendermaßen geschrieben werden:

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

Die eigentliche Frage ist jedoch, wo kam diese Liste von id s? Wenn die Liste von id s das Ergebnis einer anderen Datenbankabfrage ist, sollten Sie stattdessen entweder eine Unterauswahl oder einen Join durchführen.

Kommentare

  • Hat perfekt funktioniert. Es war nicht aus einer Datenbankabfrage, jemand ging tatsächlich durch und wählte jede Nummer aus. Ich beneide sie nicht.

Antwort

Ein Test mit EXPLAIN ANALYZE VERBOSE zeigt Ihnen, dass das Formular mit id IN (...) in der Antwort von @ 200_success intern in Folgendes umgewandelt wird:

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

.. was daher zunächst etwas schneller ist (keine Konvertierung erforderlich).

Auch das Formular in Ihrer Frage wird effektiv ausgeführt sehr ähnlich.

Bei großen Listen ist das Aufheben eines Arrays , gefolgt von einem JOIN, im Allgemeinen schneller :

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

Da die Liste is the result of another database query lautet, ist es am schnellsten, beide in one Abfrage mit einer JOIN.

Detailliertere Erklärung:

Antwort

Für eine einzelne ID hat die folgende Abfrage für mich funktioniert:

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

Kommentare

  • Können Sie erklären, wie dies das OP beantwortet?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.