SQL-forespørgsel, hvor id =… eller id =… eller id =… osv. [Lukket]

Lukket. Dette spørgsmål er uden for emnet . Det accepteres i øjeblikket ikke svar.

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?

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *