[英]"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.