如何检查数组列中是否存在特定整数?我在选择?

时间:2016-08-23 05:18:23

标签: sql postgresql

我试图运行看起来像这样的查询:

SELECT matches.*, array_agg(match_users.user_id)::int[] AS user_ids FROM "matches"
  INNER JOIN "match_users" ON "match_users"."match_id" = "matches"."id"
  WHERE (1 = ANY(user_ids))
GROUP BY matches.id

matchesusers(通过match_users联接表)存在多对多关系,而我基本上都试图找到所有{{1}给定的matches属于(在这种情况下,ID为1的用户)。

但我一直收到这个错误:

user

我确定这里有一些简单的东西我在这里失踪了......我需要用别名做些不同的事吗?

编辑:我能用子选择修复吗?以下似乎可行,但我不确定它是否完全符合我的要求而没有更多的虚拟数据和测试:

ERROR:  column "user_ids" does not exist
LINE 15:     AND (1 = ANY(user_ids))
                      ^

********** Error **********

ERROR: column "user_ids" does not exist

我也不确定它会非常高效......如果有足够的行,似乎这将是一个非常多的子选择。

1 个答案:

答案 0 :(得分:1)

使用HAVING子句:

SELECT m.*, array_agg(mu.user_id)::int[] AS user_ids
FROM "matches" m INNER JOIN
     "match_users" mu
     ON mu."match_id" = m."id"
GROUP BY m.id
HAVING MAX(CASE WHEN mu.user_id = 1 THEN 1 ELSE 0 END) > 0;

换句话说,您不必查看数组以进行检查。您只需查看返回的值即可。