Sql 检索与列出的所有值匹配的行
您好,我需要获取与列为数组的所有groupid匹配的行Sql 检索与列出的所有值匹配的行,sql,postgresql,Sql,Postgresql,您好,我需要获取与列为数组的所有groupid匹配的行 SELECT user_id,group_id FROM group_privilege_details g WHERE g.group_id in (102,101) 如果任何一个groupid匹配,这将返回我。但是,我需要userid,它包含列表中提到的所有groupid 假设您不能有重复的用户id/组id组合: SELECT user_id,count(group_id) FROM group_privilege_detail
SELECT user_id,group_id
FROM group_privilege_details g
WHERE g.group_id in (102,101)
如果任何一个groupid匹配,这将返回我。但是,我需要userid,它包含列表中提到的所有groupid 假设您不能有重复的用户id/组id组合:
SELECT user_id,count(group_id)
FROM group_privilege_details g
WHERE g.group_id in (102,101)
GROUP BY user_id
HAVING count(group_id) = 2
假设您不能有重复的用户id/组id组合:
SELECT user_id,count(group_id)
FROM group_privilege_details g
WHERE g.group_id in (102,101)
GROUP BY user_id
HAVING count(group_id) = 2
下面是Steven查询通用数组的一个变体:
SELECT user_id
FROM group_privilege_details
WHERE group_id = ANY(my_array)
GROUP BY 1
HAVING count(*) = array_length(my_array, 1)
只要满足这些要求(问题中未提及)即可进行工程:
- (用户id、组id)在
组权限\u详细信息中是唯一的
- 数组只有一个维度
- 基数组元素是唯一的
WITH ids AS (SELECT DISTINCT unnest(my_array) group_id)
SELECT g.user_id
FROM (SELECT user_id, group_id FROM group_privilege_details GROUP BY 1,2) g
JOIN ids USING (group_id)
GROUP BY 1
HAVING count(*) = (SELECT count(*) FROM ids)
每个基本元素生成一行DISTINCT
删除可能的重复。子选择对表执行相同的操作
这类查询的广泛选项列表:下面是Steven对通用数组查询的一个变体:
SELECT user_id
FROM group_privilege_details
WHERE group_id = ANY(my_array)
GROUP BY 1
HAVING count(*) = array_length(my_array, 1)
只要满足这些要求(问题中未提及)即可进行工程:
- (用户id、组id)在
组权限\u详细信息中是唯一的
- 数组只有一个维度
- 基数组元素是唯一的
WITH ids AS (SELECT DISTINCT unnest(my_array) group_id)
SELECT g.user_id
FROM (SELECT user_id, group_id FROM group_privilege_details GROUP BY 1,2) g
JOIN ids USING (group_id)
GROUP BY 1
HAVING count(*) = (SELECT count(*) FROM ids)
每个基本元素生成一行DISTINCT
删除可能的重复。子选择对表执行相同的操作
此类查询的广泛选项列表:请查找我已解决的查询:
select user_id,login_name from user_info where user_id in (
SELECT user_id FROM
group_privilege_details g WHERE g.group_id in
(select group_id from group_privilege_details g,user_info u where u.user_id=g.user_id
and login_name='123')
GROUP BY user_id HAVING count(group_id) = (select count(group_id)
from group_privilege_details g,user_info u where u.user_id=g.user_id
and login_name='123') ) and login_name!='123'
请查找我已解决的问题:
select user_id,login_name from user_info where user_id in (
SELECT user_id FROM
group_privilege_details g WHERE g.group_id in
(select group_id from group_privilege_details g,user_info u where u.user_id=g.user_id
and login_name='123')
GROUP BY user_id HAVING count(group_id) = (select count(group_id)
from group_privilege_details g,user_info u where u.user_id=g.user_id
and login_name='123') ) and login_name!='123'
好啊谢谢这是有效的。但是,如果组id列表反过来是一个子查询呢?那一次我不能使用“having”@Nila:你是说
g.group\u id在哪里(选择…
),而不是g.group\u id在哪里(102101)
?如果是这样的话,为什么你认为你不能在这种情况下使用have?好的。谢谢这是有效的。但是,如果组id列表反过来是一个子查询呢?那一次我不能使用“having”@Nila:你是说g.group\u id在哪里(选择…
),而不是g.group\u id在哪里(102101)
?如果是这样的话,为什么你认为你不能在这种情况下使用have?谢谢。它为我的提问提供了思路。谢谢。它为我的提问提供了思路。