atp*_*atp 12 mysql sql database
我有一堆用户,每个用户都有很多帖子.架构:
Users: id
Posts: user_id, rating
Run Code Online (Sandbox Code Playgroud)
如何找到至少有一个评级高于10的帖子的用户?
我不确定我是否应该使用子查询,或者是否有更简单的方法.
谢谢!
OMG*_*ies 23
要查找至少有一个评分大于10的帖子的所有用户,请使用:
SELECT u.*
FROM USERS u
WHERE EXISTS(SELECT NULL
FROM POSTS p
WHERE p.user_id = u.id
AND p.rating > 10)
Run Code Online (Sandbox Code Playgroud)
EXISTS不关心其中的SELECT语句 - 你可以用1/0替换NULL,这会导致数学错误除以零......但它不会,因为EXISTS只涉及过滤中的过滤WHERE子句.
相关性(WHERE p.user_id = u.id)是为什么它被称为相关子查询,并且除了评级比较之外,将仅返回id值匹配的USERS表中的行.
EXISTS也更快,具体取决于具体情况,因为一旦满足标准它就会返回true - 重复无关紧要.
| 归档时间: |
|
| 查看次数: |
39090 次 |
| 最近记录: |