我有一群用户,每个人都有很多帖子. 架构:
Users: id
Posts: user_id, rating
我如何找到至少有一篇文章的评分高于10分的所有用户?
我不确定是否应该使用子查询,或者是否有更简单的方法.
谢谢!
我有一群用户,每个人都有很多帖子. 架构:
Users: id
Posts: user_id, rating
我如何找到至少有一篇文章的评分高于10分的所有用户?
我不确定是否应该使用子查询,或者是否有更简单的方法.
谢谢!
要查找至少有一个帖子的评分高于10的所有用户,请使用:
SELECT u.*
FROM USERS u
WHERE EXISTS(SELECT NULL
FROM POSTS p
WHERE p.user_id = u.id
AND p.rating > 10)
EXISTS不关心其中的SELECT语句——可以用1/0替换NULL,这将导致除以零的数学错误...但它不会,因为EXISTS只关心WHERE子句中的过滤.
相关性(其中p.user_id=u.id)就是为什么这称为相关子查询,除了评级比较之外,它还将只返回id值匹配的USERS表中的行.
EXISTS也会更快,这取决于具体情况,因为一旦满足条件,它就会返回true——重复项无关紧要.