微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 操作符不存在:整数=整数[]在一个查询与任何

我经常使用integer = ANY(integer [])语法,但现在任何运算符都不起作用.这是我第一次使用它来比较一个标量与从CTE返回的整数,但我认为这不应该导致问题.

我的查询

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的细节.

那我做错了什么?

解决方法

基于错误消息部分运算符不存在:integer = integer [],似乎需要不需要bs列,以便将右侧返回到整数,以便可以找到比较运算符:
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 [],它不具有运算符,因此导致错误.

不察觉整数[]值使得左和右手表达式成为整数,因此比较可以继续.

修改SQL Fiddle.

注意:使用IN而不是= ANY时会看到相同的行为.

原文地址:https://www.jb51.cc/mssql/75621.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐