SQL dotaz, kde id =… nebo id =… nebo id =… atd. [Uzavřeno]

Uzavřeno. Tato otázka je mimo téma . Momentálně nepřijímá odpovědi.

Komentáře

  • Pokud existuje opravdu 800 klauzulí, myslím, že byste měli na své aplikaci pracovat

Odpověď

Způsob, jak tento dotaz napsat, je:

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

Skutečná otázka však je, kde pochází ten seznam id s? Pokud je seznam id s výsledkem jiného databázového dotazu, měli byste místo toho použít buď podmnožinu, nebo spojení.

Komentáře

  • Fungovalo to perfektně. Nebylo to z databázového dotazu, někdo ve skutečnosti prošel a vybral každé číslo. Nezávidím jim.

Odpovědět

Test s EXPLAIN ANALYZE VERBOSE vám ukáže, že formulář s id IN (...) v odpovědi @ 200_success je interně transformován do:

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

.. které tedy začínají o něco rychleji (není nutná žádná konverze).

Formulář v otázce bude také účinně fungovat velmi podobný.

U velkých seznamů bude rozbalení pole následované JOIN obecně rychlejší :

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

Jelikož je seznam is the result of another database query, bude nejrychlejší kombinovat oba v jednom dotaz s JOIN.

Podrobnější vysvětlení:

Odpověď

U jednoho ID pro mě fungoval následující dotaz:

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

Komentáře

  • Mohli byste vysvětlit, jak to odpovídá OP?

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *