sql - postgres 选择数组列表的值必须存在的位置

标签 sql postgresql

我在 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/

相关文章:

java - 如何在 hibernate 中使用子查询到 "from"子句?

sql - 从表中选择在第二个表中没有相关条目的行

mysql - 创建 Hibernate JPA View

java - JDBC + postgres 连接问题

postgresql - 在 postgresql 上创建的新集群中添加数据库?

mysql - sql中的求和语句

sql - 物化 View 强制和完整

SQL转储上传语法错误

sql - SQL Server 函数 Convert 的 Postgresql 等价物

sql - 无法将 View 列的数据类型从数字更改为数字(4,1)