PostgreSQL中IN
和ANY
运算符有什么区别?
两者的工作机制似乎是一样的.任何人都能用一个例子来解释这个吗
从逻辑上讲,引用手册:
IN
相当于= ANY
.
但有两个语法变种的IN
和的两种变体ANY
结构.细节:
如何在带有Rails的WHERE子句中使用ANY而不是IN?
该IN ()
变种采取了一系列相当于= ANY()
服用一集,如下所示:
postgreSQL - in vs any
但是每个的第二个变体并不等同于另一个.ANY
构造的第二个变体采用数组(必须是实际的数组类型),而第二个变体IN
采用逗号分隔的值列表.这导致了不同的限制,传递价值和可能也导致在特殊情况下不同的查询计划:
索引未使用=any()
但与之一起使用in
将多个值集或值数组传递给函数
该ANY
构造更加通用,因为它可以与各种操作员组合,而不仅仅是=
.示例LIKE
:
SELECT 'foo' LIKE ANY('{FOO,bar,%oo%}');
对于大量的值,为每个值提供更好的集合:
使用大IN优化Postgres查询
有关:
PostgreSQL可以索引数组列吗?
反转:
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;