SQL-query waarbij id =… of id =… of id =… etc [gesloten]

Gesloten. Deze vraag is off-topic . Het accepteert momenteel geen antwoorden.

Opmerkingen

  • Als er echt 800 Where-clausules zijn, denk ik dat je aan je applicatie moet werken

Antwoord

De manier om die vraag te schrijven is:

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

De echte vraag is echter, waar komt die lijst met id s vandaan? Als de lijst met id s het resultaat is van een andere databasequery, dan zou je in plaats daarvan een subselectie of een join moeten uitvoeren.

Reacties

  • Werkte perfect. Het was niet van een database-query, iemand ging er echt doorheen en koos elk nummer uit. Ik benijd ze niet.

Antwoord

Een test met EXPLAIN ANALYZE VERBOSE laat zien dat het formulier met id IN (...) in het antwoord van @ 200_success intern wordt omgezet in:

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

.. die daarom in het begin iets sneller presteert (geen conversie nodig).

Ook zal het formulier in uw vraag effectief presteren zeer vergelijkbaar.

Met grote lijsten zal een array ongedaan maken , gevolgd door een JOIN over het algemeen sneller zijn :

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

Aangezien de lijst is the result of another database query is, is het het snelst om beide te combineren in één zoekopdracht met een JOIN.

Meer gedetailleerde uitleg:

Answer

Voor een enkele id werkte de volgende vraag voor mij:

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

Reacties

  • Kunt u uitleggen hoe dit het OP beantwoordt?

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *