Postgresql 从满足以文本形式给出的条件的整数数组中获取匹配结果

Postgresql 从满足以文本形式给出的条件的整数数组中获取匹配结果,postgresql,postgresql-8.4,Postgresql,Postgresql 8.4,我在用户表的特定字段中存储了一个整数数据数组。此数组表示用户所属的组。用户可以有任意数量的组 即 表:用户 表:小组 对不起,这应该是1-N关系。我需要执行如下查询 SELECT * from user where user_groups = ANY(x); 其中x将是文本值,即艺术、科学、安全、体育。 所以当x=Arts时,返回harry的结果。我使用的数据库是Postgresql8.4。您可以使用operator: SELECT * FROM Users WHERE user_groups

我在用户表的特定字段中存储了一个整数数据数组。此数组表示用户所属的组。用户可以有任意数量的组

表:用户

表:小组

对不起,这应该是1-N关系。我需要执行如下查询

SELECT * from user where user_groups = ANY(x);
其中x将是文本值,即艺术、科学、安全、体育。 所以当x=Arts时,返回harry的结果。我使用的数据库是Postgresql8.4。您可以使用operator:

SELECT *
FROM Users
WHERE user_groups @> (SELECT ARRAY[group_id]
                      FROM Groups
                      WHERE group_name = 'Arts')
编辑:


是否有任何方法可以显示用户组,如 {艺术、科学、安全},而不是{1,2,3}

您可以使用相关子查询:

SELECT user_id, user_name, (SELECT array_agg(g.group_name)
                            FROM Groups g
                            WHERE ARRAY[g.group_id] <@ u.user_groups) AS user_groups
FROM Users u
WHERE user_groups @> (SELECT ARRAY[group_id]
                      FROM Groups
                      WHERE group_name = 'Arts')

有没有什么方法可以让我显示像{Arts,Science,Security}这样的用户组而不是{1,2,3}?你真的在使用Postgres 8.4吗?然后,您应该立即计划升级到受支持和维护的版本。
SELECT *
FROM Users
WHERE user_groups @> (SELECT ARRAY[group_id]
                      FROM Groups
                      WHERE group_name = 'Arts')
SELECT user_id, user_name, (SELECT array_agg(g.group_name)
                            FROM Groups g
                            WHERE ARRAY[g.group_id] <@ u.user_groups) AS user_groups
FROM Users u
WHERE user_groups @> (SELECT ARRAY[group_id]
                      FROM Groups
                      WHERE group_name = 'Arts')