sql >> Databáze >  >> RDS >> PostgreSQL

IN vs ANY operátor v PostgreSQL

(Ani IN ani ANY je „operátor“. "konstrukt" nebo "prvek syntaxe".)

Logicky , cituji manuál:

IN je ekvivalentní = ANY .

Existují ale dvě syntaktické varianty z IN a dvě varianty ANY . Podrobnosti:

  • Jak použít ANY místo IN v klauzuli WHERE s Rails?

IN používání sady je ekvivalentní = ANY pořízení sady , jak je ukázáno zde:

  • postgreSQL – in vs. jakýkoli

Ale druhá varianta každé není ekvivalentní té druhé. Druhá varianta ANY konstrukt bere pole (musí jít o skutečný typ pole), zatímco druhá varianta IN přebírá seznam hodnot oddělený čárkami . To vede k různým omezením při předávání hodnot a může také ve zvláštních případech vést k různým plánům dotazů:

  • Index se nepoužívá s =any() ale používá se s in
  • Předejte funkci více sad nebo polí hodnot
  • Jak spárovat prvky v poli složeného typu?

ANY je všestrannější

ANY konstrukt je mnohem všestrannější, protože jej lze kombinovat s různými operátory, nejen s = . Příklad:

SELECT 'foo' LIKE ANY('{FOO,bar,%oo%}');

Pro velký počet hodnot poskytnutí množiny měří se lépe pro každého:

  • Optimalizace dotazu Postgres s velkým IN

Související:

  • Může PostgreSQL indexovat sloupce pole?

Inverze / opak / vyloučení

„Najít řádky, kde je id je v daném poli":

SELECT * FROM tbl WHERE id = ANY (ARRAY[1, 2]);

Inverze:„Najít řádky, kde je id není v poli":

SELECT * FROM tbl WHERE id <> ALL (ARRAY[1, 2]);
SELECT * FROM tbl WHERE id <> ALL ('{1, 2}');  -- equivalent array literal
SELECT * FROM tbl WHERE NOT (id = ANY ('{1, 2}'));

Všechny tři ekvivalentní. První s konstruktorem pole, další dva s literálem pole. Datový typ lze jednoznačně odvodit z kontextu. Jinak může být vyžadováno explicitní obsazení, například '{1,2}'::int[] .

Řádky s id IS NULL nepředávejte žádný z těchto výrazů. Chcete-li zahrnout NULL hodnoty navíc:

SELECT * FROM tbl WHERE (id = ANY ('{1, 2}')) IS NOT TRUE;


  1. Postgres SELECT, kde WHERE je UUID nebo řetězec

  2. php kód pro testování pdo je k dispozici?

  3. Instalace WordPress 5 na ZEIT Now s hostingem MySQL

  4. Jak vrátit pozici položky seznamu v MySQL