2015-05-15 11 views
14

Ho provato siapostgreSQL - in contro qualsiasi

1) smthng = qualsiasi (selezionare id da exmplTable)

2) smthng a (selezionare id da exmplTable)

e sto ottenendo gli stessi risultati per i miei dati.

C'è qualche differenza per le due espressioni ?

+2

Dalle [doc] (http://www.postgresql.org/docs /current/static/functions-subquery.html): * 'SOME' è un sinonimo di' ANY'. 'IN' è equivalente a' = ANY'. * – pozs

+0

Dai uno sguardo, è spiegato qui: http://www.postgresql.org/docs/current/static/functions-comparisons.html – Roger

risposta

16

No, nelle varianti sono gli stessi:

si possono vedere - i piani di esecuzione sono gli stessi troppo:

 
postgres=# explain select * from foo1 where id in (select id from foo2); 
┌──────────────────────────────────────────────────────────────────┐ 
│       QUERY PLAN       │ 
╞══════════════════════════════════════════════════════════════════╡ 
│ Hash Semi Join (cost=3.25..21.99 rows=100 width=4)    │ 
│ Hash Cond: (foo1.id = foo2.id)         │ 
│ -> Seq Scan on foo1 (cost=0.00..15.00 rows=1000 width=4)  │ 
│ -> Hash (cost=2.00..2.00 rows=100 width=4)     │ 
│   -> Seq Scan on foo2 (cost=0.00..2.00 rows=100 width=4) │ 
└──────────────────────────────────────────────────────────────────┘ 
(5 rows) 

postgres=# explain select * from foo1 where id = any (select id from foo2); 
┌──────────────────────────────────────────────────────────────────┐ 
│       QUERY PLAN       │ 
╞══════════════════════════════════════════════════════════════════╡ 
│ Hash Semi Join (cost=3.25..21.99 rows=100 width=4)    │ 
│ Hash Cond: (foo1.id = foo2.id)         │ 
│ -> Seq Scan on foo1 (cost=0.00..15.00 rows=1000 width=4)  │ 
│ -> Hash (cost=2.00..2.00 rows=100 width=4)     │ 
│   -> Seq Scan on foo2 (cost=0.00..2.00 rows=100 width=4) │ 
└──────────────────────────────────────────────────────────────────┘ 
(5 rows) 
+2

Nota che mentre questo è vero per la forma prende un * set *, c'è una seconda forma per ogni 'IN()' e '= ANY()' e quelli non sono completamente equivalenti. Considerare: http://stackoverflow.com/a/34627688/939860 e http://dba.stackexchange.com/q/125413/3684 –

+1

@ErwinBrandstetter: = ANY (ARRAY) è una diversa creatura .. sebbene la sintassi sia la stessa –