我在postgres中遇到查询问题。我需要选择所有用户ID,其中某些规则数组的值必须存在,并且这些规则ID来自子查询。
这是我的表结构:
users: {user_id, name, email}
rules: {rule_id, name, description, query}
user_scores: {user_id, rule_id, points}
因此在上面的示例中,我需要找出所有遵守所有规则的用户。
实际上,我想避免使用后端语言循环播放并检查用户是否对每个规则都有得分。我需要从存在所有规则ID的user_scores
表中获取所有用户ID。我实际上正在寻找IN运算符,但具有AND性质,例如
select user_id
from user_scores
WHERE rule_id IN (select rule_id from rules)
group by user_id
因此,代替“ IN”,它应该像“ IN for ALL” ..之类的东西工作
任何帮助都会很高兴。
答案 0 :(得分:0)
要获取对所有规则都评分的所有用户的列表,可以将外部联接与rules
一起使用:
SELECT u.user_id, u.name
FROM users AS u
JOIN user_scores AS us ON u.user_id = us.user_id
LEFT JOIN rules AS r ON us.rule_id = r.rule_id
GROUP BY u.user_id, u.name
HAVING (count(*) FILTER (WHERE r.rule_id IS NULL)) = 0;
我无法对其进行测试,因此可能存在一些细微的错误。