SQL-spørring der id =… eller id =… eller id =… etc [lukket]

Stengt. Dette spørsmålet er utenfor emnet . Det aksepteres for øyeblikket ikke svar.

Kommentarer

  • Hvis det virkelig er 800 klausuler, synes jeg du bør jobbe med søknaden din

Svar

Måten å skrive spørringen på er:

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

Det virkelige spørsmålet er imidlertid hvor kom listen over id fra? Hvis listen over id s er resultatet av et annet databasespørsmål, bør du i stedet gjøre enten et undervalg eller en sammenkobling.

Kommentarer

  • Fungerte perfekt. Det var ikke fra et databasespørsmål, noen gikk faktisk gjennom og plukket ut hvert nummer. Jeg misunner ikke dem.

Svar

En test med EXPLAIN ANALYZE VERBOSE vil vise deg at skjemaet med id IN (...) i svaret på @ 200_success blir forvandlet internt til:

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

.. som derfor fungerer litt raskere til å begynne med (ingen konvertering er nødvendig).

Også skjemaet i spørsmålet ditt vil effektivt utføre veldig lik.

Med store lister vil fjerne et array , etterfulgt av en JOIN vil generelt være raskere :

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

Siden listen er is the result of another database query, vil det være raskest å kombinere begge i one forespørsel med JOIN.

Mer detaljert forklaring:

Svar

For en enkelt id fungerte følgende spørsmål for meg:

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

Kommentarer

  • Kan du forklare hvordan dette svarer på OP?

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *