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); 当我运行它,它会抛出以下错误:
这个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的文件:
…这个错误是有道理的,因为左边的表达式是一个整数 – 列b – 而右边的表达式是一个整数数组,或者是整数[],所以比较结果是形式integer = integer [],它不具有运算符,因此导致错误. 不察觉整数[]值使得左和右手表达式成为整数,因此比较可以继续. 修改SQL Fiddle. 注意:使用IN而不是= ANY时会看到相同的行为. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |