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?
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)
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