Modul de a scrie acea interogare este:
SELECT * FROM member_copy WHERE id IN (17579, 17580, 17582);
Cu toate acestea, adevărata întrebare este, unde a venit acea listă de id
? Dacă lista id
este rezultatul unei alte interogări în baza de date, atunci ar trebui să faceți fie un subselect, fie o unire.
Comentarii
Un test cu EXPLAIN ANALYZE VERBOSE
vă va arăta că formularul cu id IN (...)
în răspunsul al @ 200_success este transformat intern în:
SELECT * FROM member_copy WHERE id = ANY ("{17579, 17580, 17582}");
.. care, prin urmare, funcționează ușor mai repede pentru a începe (nu este necesară conversia).
De asemenea, formularul din întrebarea dvs. se va efectua foarte asemanator.
În cazul listelor mari, ignorând un tablou , urmat de un JOIN
va fi în general mai rapid :
SELECT m.* FROM unnest("{17579, 17580, 17582}"::int[]) id JOIN member_copy m USING (id);
Întrucât lista este is the result of another database query
, va fi mai rapid să le combinați pe ambele în unul interogare cu un JOIN
.
Explicație mai detaliată:
Pentru un singur id, următoarea interogare a funcționat pentru mine:
SELECT * FROM member_copy WHERE id IN ("17579");
Comentarii