PostgreSQL中IN和ANY运算符有什么区别?
两者的工作机制似乎是一样的.任何人都能用一个例子来解释这个吗
两者的工作机制似乎是一样的.任何人都能用一个例子来解释这个吗
解决方法
逻辑上,quoting the manual:
IN
is equivalent to= ANY
.
但是IN有两种语法变体,ANY结构有两种变体.细节:
> How to use ANY instead of IN in a WHERE clause with Rails?
取一组的IN()变体相当于= ANY()取一组,如下所示:
但是每个的第二个变体并不等同于另一个. ANY构造的第二个变体采用数组(必须是实际的数组类型),而IN的第二个变体采用逗号分隔的值列表.这会导致传递值的不同限制,并且在特殊情况下也会导致不同的查询计划:
> Index not used with =any()
but used with in
> Pass multiple sets or arrays of values to a function
ANY结构更加通用,因为它可以与各种运算符结合使用,而不仅仅是=. LIKE示例:
SELECT 'foo' LIKE ANY('{FOO,bar,%oo%}');
对于大量的值,为每个值提供更好的集合:
> Optimizing a Postgres query with a large IN
有关:
> Can PostgreSQL index array columns?
反转/反对/排斥
反转:
SELECT * FROM foo WHERE id = ANY (ARRAY[1,2]);
“找到id不在数组中的行” – 是:
SELECT * FROM foo WHERE id <> ALL (ARRAY[1,2]);
这与以下相同:
SELECT * FROM foo WHERE NOT (id = ANY (ARRAY[1,2]));
ID为IS NULL的行不会传递这些表达式中的任何一个.要另外包含NULL值:
SELECT * FROM foo WHERE (id = ANY (ARRAY[1,2])) IS NOT TRUE;