微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL中的IN vs ANY运算符

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()取一组,如下所示:

> postgreSQL – in vs 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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐