SQL 查询至少其中一项

标签 sql mysql database

我有一堆用户,每个用户都有很多帖子。 架构:

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 子句中的过滤。

相关性(WHERE p.user_id = u.id)就是为什么这被称为相关子查询,除了评级比较之外,它只会返回 ID 值匹配的 USERS 表中的行。

EXISTS 也更快,具体视情况而定,因为它会在满足条件后立即返回 true - 重复项无关紧要。

关于SQL 查询至少其中一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3197322/

相关文章:

database - 如何在 Android 虚拟设备上找到数据库文件?

mysql - 引用复合主键的单个列

SQL Server 2005 : Nullable Foreign Key Constraint

SQL Server 在数据库触发器中获取表名

java - Netbeans Java Web 应用程序部署到 Web 主机

mysql - 修复mysql查询

PHP 舍入问题

sql - 从 NOT EXISTS 转换为 NOT IN

mysql - 如何使用mysql查询计算到期日期?

MySQL 查询。无法获得它