mysql - Sql 使用比 from-in to-in 命令更小的命令

标签 mysql sql

您假设在 posts 表中我有 10 条记录,其中包含 deleted 列,例如:

id    title     deleted
1     a         true
2     a         true
3     a         false
4     a         false
5     a         false
6     a         false
7     a         false
8     a         false
9     a         true
10    a         true

id 3 到 8 中的 deleted 列为 false

我想选择从 3 到 deleted 列为 true 之间的所有记录,以查找其中 false 的记录数,

例如

select * from posts where id = 10 (to find which id is true)

我想要这个结果:

3,4,5,6,7,8

最佳答案

要查找已删除的第一个 id (>3),您可以使用:

SELECT id FROM posts WHERE deleted = 'true' AND id > 3 ORDER BY id LIMIT 1

这将导致9。使用上面作为子查询,查找 3 到 8 之间的所有行:

SELECT * 
FROM posts 
WHERE id >= 3 
  AND id < (SELECT id FROM posts WHERE deleted = 'true' AND id > 3 ORDER BY id LIMIT 1)

如果 id > 3 之后没有任何 deleted = 'true' 行,子查询将返回 NULL,因此要添加案例:

SELECT * 
FROM posts 
WHERE id >= 3 
  AND (
    id < (SELECT id FROM posts WHERE deleted = 'true' AND id > 3 ORDER BY id LIMIT 1)
    OR (SELECT id FROM posts WHERE deleted = 'true' AND id > 3 ORDER BY id LIMIT 1) IS NULL
  )

关于mysql - Sql 使用比 from-in to-in 命令更小的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45653340/

相关文章:

mysql - 可以从 PHP 连接,但不能从 Linux Redhat 控制台连接

结果集返回大量数据时的java堆大小问题

java - 如何将多个xml值存储到java中

java - AnnotationException : A Foreign key refering has the wrong number of column. 应该是 0

MySQL 条件 "ON"语句

mysql - SQL 查询与 EXISTS 的差异

sql - SQL中 "GO"语句的真正作用?

java - 使用实体管理器时,没有为该名称定义查询

asp.net - 字符支持问题 - 如何将较高的 ASCII 字符转换为较低的 ASCII 字符

mysql - mysql/mongodb集群适合安装在kubernetes上吗?