web-dev-qa-db-fra.com

postgreSQL - in vs any

J'ai essayé les deux

1) smthng = any (sélectionnez l'id dans exmplTable)

2) smthng in (sélectionnez l'id dans exmplTable)

et j'obtiens les mêmes résultats pour mes données.

Y a-t-il une différence pour les deux expressions?

24
PROvlima

Non, dans ces variantes sont les mêmes:

Vous pouvez voir - les plans d'exécution sont également les mêmes:

 postgres = # expliquer sélectionner * dans foo1 où id dans (sélectionner id dans foo2); 
 ┌────────────────────── ─────────────────────────────────────────────┐ 
 │ PLAN DE REQUÊTE │ 
 ╞═══════════════════════════════════════ ═══════════════════════════╡ 
 │ Hash Semi Join (coût = 3,25..21,99 lignes = 100 largeur = 4 ) │ 
 │ Hash Cond: (foo1.id = foo2.id) │ 
 │ -> Seq Scan sur foo1 (coût = 0,00..15,00 lignes = 1000 largeur = 4) │ 
 │ -> Hash (coût = 2,00..2,00 lignes = 100 largeur = 4) │ 
 │ -> Seq Scan sur foo2 (coût = 0,00..2,00 lignes = 100 largeur = 4) │ 
 └─ ──────────────────────────────────────────────────── ──────────────┘ 
 (5 lignes) 
 
 Postgres = # expliquer select * from foo1 where id = any (select id from foo2); 
 ┌────────────────────────────────────────── ─────────────────────────┐ 
 │ PLAN DE REQUÊTE │ 
 ╞═════════ ══════════════════════════════════════════════════ ═══════╡ 
 │ Hash Semi Join (coût = 3,25..21,99 lignes = 100 largeur = 4) │ 
 │ Hash Cond: (foo1.id = foo2.id) │ 
 │ -> Seq Scan sur foo 1 (coût = 0,00..15,00 lignes = 1000 largeur = 4) │ 
 │ -> Hash (coût = 2,00..2,00 lignes = 100 largeur = 4) │ 
 │ -> Seq Scan sur foo2 (coût = 0,00..2,00 lignes = 100 largeur = 4) │ 
 └──────────────────────────── ───────────────────────────────────────┘ 
 (5 rangées) 
23
Pavel Stehule

Cela peut être un cas Edge mais:

select * from myTable where id IN ()

produira: ERREUR: erreur de syntaxe à ou près de ")"

mais

select * from myTable where id = ANY('{}');

Renvoie un jeu de résultats vide

6
WigglyWorld