SQL-fråga där id =… eller id =… eller id =… etc [stängt]

<åt sidan class = "s-meddelande s-meddelande__info js-post -meddelande mb16 "role =" status ">

Stängd. Denna fråga är utanför ämnet . För närvarande accepteras inte svar.

Kommentarer

  • Om det verkligen finns 800 där klausuler tycker jag att du borde arbeta med din ansökan

Svar

Sättet att skriva den frågan är:

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

Den verkliga frågan är dock var kom listan över id från? Om listan med id s är resultatet av en annan databasfråga, bör du göra antingen ett underval eller en anslutning istället.

Kommentarer

  • Fungerade perfekt. Det var inte från en databasfråga, någon gick faktiskt igenom och plockade ut varje nummer. Jag avundar dem inte.

Svar

Ett test med EXPLAIN ANALYZE VERBOSE visar att formuläret med id IN (...) i svaret på @ 200_success omvandlas internt till:

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

.. som därför fungerar lite snabbare till att börja med (ingen konvertering behövs).

Formuläret i din fråga kommer också att fungera effektivt väldigt lik.

Med stora listor kommer att ta bort en array följt av en JOIN i allmänhet snabbare :

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

Eftersom listan är is the result of another database query blir det snabbast att kombinera båda i en fråga med en JOIN.

Mer detaljerad förklaring:

Svar

För ett enda ID fungerade följande fråga för mig:

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

Kommentarer

  • Kan du förklara hur detta svarar på OP?

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *