繁体   English   中英

“错误:运算符不存在:integer = integer[]”在 PostgreSQL 中使用“IN”运算符时。 为什么我会收到此错误?

[英]"ERROR: operator does not exist : integer = integer[]" when using "IN" operator in PostgreSQL. Why do I get this error?

我想要达到的目标

首先,我需要查询表sysusercompetence以获取满足内部 WHERE 条件的所有用户 ID。 然后我用array_agg(userid)将它聚合到一个用户 ID 数组中。 然后在外部查询中,我需要 select 用户来自extendeduserinformation表,用户ID 存在于我之前从sysusercompetence创建的数组中。

错误

我收到以下错误:

ERROR: operator does not exist: integer = integer[]

LINE 2: WHERE 3 IN ((

HINT: No operator matches the given name and argument types. You might need to add explicit type cast.

我的查询:

SELECT * FROM mbraindb.extendeduserinformation 
WHERE 3 IN ((
SELECT array_agg(userid) userids FROM
  (
    SELECT 
    DISTINCT(uc.userid), eui.firstname
    FROM mbraindb.sysusercompetence uc 
    JOIN mbraindb.extendeduserinformation eui ON uc.userid = eui.auth_userid
    WHERE uc.level = 4 
    AND uc.subjectid = 1
    AND uc.lineid = 5 
    GROUP BY uc.userid, eui.firstname
    ORDER BY eui.firstname
  ) AS userids 
))

顺便说一句,我现在只使用“3”作为硬编码示例来让查询首先运行。

问题

为什么我会收到错误消息?

谢谢!

array_agg 在这种情况下是没有用的。 这只是很大的开销,并且会阻止一些可能的优化。

只写WHERE d IN (SELECT userid...

注意 - 当您确实需要检查某个值是否在数组中时,您应该使用 operator = ANY() ,但这不是这种情况:

postgres=# SELECT 1 WHERE 1 = ANY(ARRAY[1,2,3]);
┌──────────┐
│ ?column? │
╞══════════╡
│        1 │
└──────────┘
(1 row)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM