您假设在 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/