我的查询:
WITH bar AS ( SELECT array_agg(b) AS bs FROM foo WHERE c < 3 ) SELECT a FROM foo WHERE b = ANY ( SELECT bs FROM bar);
当我运行它,它会抛出以下错误:
ERROR: operator does not exist: integer = integer[]: WITH bar AS (
SELECT array_agg(b) AS bs FROM foo WHERE c < 3 ) SELECT a FROM foo
WHERE b = ANY ( SELECT bs FROM bar)
这个SQL Fiddle的细节.
那我做错了什么?
解决方法
WITH bar AS ( SELECT array_agg(b) AS bs FROM foo WHERE c < 3 ) SELECT a FROM foo WHERE b = ANY ( SELECT unnest(bs) FROM bar);
这导致输出:
A 2 3
给出ANY function的文件:
The right-hand side is a parenthesized subquery,which must return
exactly one column. The left-hand expression is evaluated and compared
to each row of the subquery result using the given operator,which
must yield a Boolean result. The result of ANY is “true” if any true
result is obtained. The result is “false” if no true result is found
(including the case where the subquery returns no rows).
…这个错误是有道理的,因为左边的表达式是一个整数 – 列b – 而右边的表达式是一个整数数组,或者是整数[],所以比较结果是形式integer = integer [],它不具有运算符,因此导致错误.
不察觉整数[]值使得左和右手表达式成为整数,因此比较可以继续.
注意:使用IN而不是= ANY时会看到相同的行为.
原文地址:https://www.jb51.cc/mssql/75621.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。