我在 postgres 中遇到了一个查询问题。我需要选择某些规则数组必须存在值的所有用户标识,并且这些规则标识来自子查询。
这是我的表结构:
users: {user_id, name, email}
rules: {rule_id, name, description, query}
user_scores: {user_id, rule_id, points}
所以在上面的例子中我需要找出所有玩过所有规则的用户。
实际上,我想避免使用后端语言来循环检查用户是否对每条规则都有分数。我需要从存在所有 ruleid 的 user_scores
表中获取所有 userid。我实际上正在寻找 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”......或类似的方式
我们将竭诚为您提供帮助。
最佳答案
要获得所有规则得分的所有用户的列表,您可以使用带有 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;
我没法测试,所以可能会有一些小错误。
关于sql - postgres 选择数组列表的值必须存在的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51896575/