What is the difference between IN
and ANY
operator in PostgreSQL?
The working mechanism of both seems to be the same. Can anyone explain this with an example?
问题:
回答1:
Logically, quoting the manual:
IN
is equivalent to= ANY
.
But there are two syntax variants of IN
and two variants of the ANY
construct. Details:
- How to use ANY instead of IN in a WHERE clause with Rails?
The IN ()
variant taking a set is equivalent to = ANY()
taking a set, as demonstrated here:
- postgreSQL - in vs any
But the second variant of each is not equivalent to the other. The second variant of the ANY
construct takes an array (must be an actual array type), while the second variant of IN
takes a comma-separated list of values. This leads to different restrictions in passing values and can also lead to different query plans in special cases:
- Index not used with
=any()
but used within
- Pass multiple sets or arrays of values to a function
The ANY
construct is far more versatile, as it can be combined with various operators, not just =
. Example for LIKE
:
SELECT 'foo' LIKE ANY('{FOO,bar,%oo%}');
For a big number of values, providing a set scales better for each:
- Optimizing a Postgres query with a large IN
Related:
- Can PostgreSQL index array columns?