SQL lekérdezés, ahol id =… vagy id =… vagy id =… stb. [Bezárva]

Zárt. Ez a kérdés témán kívül van . Jelenleg nem fogadja el a válaszokat.

Megjegyzések

  • Ha valóban vannak 800 záradékok, akkor szerintem dolgozzon az alkalmazásán.

Válasz

A lekérdezés megírásának módja a következő:

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

Az igazi kérdés azonban az, hogy hol a id ek listája származott? Ha a id ek listája egy másik adatbázis-lekérdezés eredménye, akkor vagy alszelektálást, vagy csatlakozást kell végeznie.

Megjegyzések

  • Tökéletesen működött. Nem adatbázis lekérdezésből származott, valaki valóban átment és minden számot kiválasztott. Nem irigylem őket.

Válasz

Teszt a EXPLAIN ANALYZE VERBOSE megmutatja, hogy a (z) id IN (...) nevű űrlap a @ 200_success válaszban belső módon alakul át:

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

.. ami tehát kezdetben valamivel gyorsabban teljesít (nincs szükség átalakításra).

A kérdésben szereplő űrlap is hatékonyan teljesít nagyon hasonló.

Nagy listák esetén a tömb megsemmisítése , majd egy JOIN követése :

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

Mivel a lista is the result of another database query, a leggyorsabb mindkettőt kombinálni az egyben egy JOIN lekérdezéssel.

Részletesebb magyarázat:

Válasz

Egyetlen azonosító esetében a következő lekérdezés működött nekem:

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

Megjegyzések

  • Meg tudnád magyarázni, hogy ez miként válaszol az OP-ra?

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük