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