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;

相关文章

文章浏览阅读601次。Oracle的数据导入导出是一项基本的技能,...
文章浏览阅读553次。开头还是介绍一下群,如果感兴趣polardb...
文章浏览阅读3.5k次,点赞3次,收藏7次。折腾了两个小时多才...
文章浏览阅读2.7k次。JSON 代表 JavaScript Object Notation...
文章浏览阅读2.9k次,点赞2次,收藏6次。navicat 连接postgr...
文章浏览阅读1.4k次。postgre进阶sql,包含分组排序、JSON解...