从满足以文本形式给出的条件的整数数组中获取匹配结果
Fetch matching results from the integer array satisfying the condition which is given as text
我在用户 table 的特定字段中存储了一个整数数据数组。该数组表示用户所属的组。一个用户可以拥有任意数量的组。
即
Table: 用户
user_id | user_name | user_groups
---------+-------------+-------------
1 | harry | {1,2,3}
2 | John | {4,5,6}
Table:群组
group_id | group_name
------------+--------------
1 | Arts
2 | Science
3 | Security
4 | Sports
(不好意思,应该是1-N关系)。我需要执行如下查询,
SELECT * from user where user_groups = ANY(x);
其中 x
将是文本值 Arts、Science、Security、Sports。
所以当x=Arts时,返回harry
的结果。我使用的数据库是 Postgresql8.4
您可以使用 @> contains
运算符:
SELECT *
FROM Users
WHERE user_groups @> (SELECT ARRAY[group_id]
FROM Groups
WHERE group_name = 'Arts')
编辑:
Is there any way by which I could display user_groups like
{Arts,Science,Security}, instead of {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')
我在用户 table 的特定字段中存储了一个整数数据数组。该数组表示用户所属的组。一个用户可以拥有任意数量的组。
即
Table: 用户
user_id | user_name | user_groups
---------+-------------+-------------
1 | harry | {1,2,3}
2 | John | {4,5,6}
Table:群组
group_id | group_name
------------+--------------
1 | Arts
2 | Science
3 | Security
4 | Sports
(不好意思,应该是1-N关系)。我需要执行如下查询,
SELECT * from user where user_groups = ANY(x);
其中 x
将是文本值 Arts、Science、Security、Sports。
所以当x=Arts时,返回harry
的结果。我使用的数据库是 Postgresql8.4
您可以使用 @> contains
运算符:
SELECT *
FROM Users
WHERE user_groups @> (SELECT ARRAY[group_id]
FROM Groups
WHERE group_name = 'Arts')
编辑:
Is there any way by which I could display user_groups like {Arts,Science,Security}, instead of {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')