当前位置:  开发笔记 > 数据库 > 正文

PostgreSQL中的IN vs ANY运算符

如何解决《PostgreSQL中的INvsANY运算符》经验,为你挑选了1个好方法。

PostgreSQL中INANY运算符有什么区别?
两者的工作机制似乎是一样的.任何人都能用一个例子来解释这个吗



1> Erwin Brands..:

从逻辑上讲,引用手册:

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;


明确说明第二个变体的结果总是相同的,这很好.我99%肯定事实上是这样,但答案似乎没有说明.这意味着`SELECT*from mytable where id in(1,2,3)`总是会产生与`SELECT*from mytable相同的行,其中id = ANY('{1,2,3}')`,即使他们可能有不同的查询计划.
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有