Kommentarer
- Hvis der virkelig er 800 hvor klausuler synes jeg du skal arbejde på din ansøgning
Svar
Måden at skrive denne forespørgsel på er:
SELECT * FROM member_copy WHERE id IN (17579, 17580, 17582);
Det virkelige spørgsmål er dog, hvor kom listen over id
fra? Hvis listen over id
s er resultatet af en anden databaseforespørgsel, skal du i stedet enten foretage en undervalg eller en sammenkædning.
Kommentarer
- Fungerede perfekt. Det var ikke fra en databaseforespørgsel, nogen gik faktisk igennem og valgte hvert nummer. Jeg misunder ikke dem.
Svar
En test med EXPLAIN ANALYZE VERBOSE
vil vise dig, at formularen med id IN (...)
i svaret på @ 200_success omdannes internt til:
SELECT * FROM member_copy WHERE id = ANY ("{17579, 17580, 17582}");
.. som derfor fungerer lidt hurtigere til at begynde med (ingen konvertering nødvendig).
Også formularen i dit spørgsmål udfører effektivt meget ens.
Med store lister vil fjerne et array efterfulgt af et JOIN
vil generelt være hurtigere :
SELECT m.* FROM unnest("{17579, 17580, 17582}"::int[]) id JOIN member_copy m USING (id);
Da listen er is the result of another database query
, vil det være hurtigst at kombinere begge i one forespørgsel med en JOIN
.
Mere detaljeret forklaring:
Svar
For et enkelt id fungerede følgende forespørgsel for mig:
SELECT * FROM member_copy WHERE id IN ("17579");
Kommentarer
- Kan du forklare, hvordan dette svarer på OP?