SQL查询至少有一个东西

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 - 重复无​​关紧要.