如何用单条SQL查询指定ID及以下、同docId的records表数据?
单条SQL实现需求的方案
当然可以!你完全能用单条SQL完成这个查询,下面给你两种实用的实现方式:
方法一:使用子查询
这种方式和你原来两条SQL的逻辑完全一致,只是把获取docId的步骤整合到子查询里:
SELECT id, title FROM records WHERE docId = (SELECT docId FROM records WHERE id = 4) AND id <= 4;
子查询会先拿到id=4对应的docId,外层查询再筛选出所有拥有这个docId且id<=4的记录。
方法二:使用自连接
通过将表与自身连接,以目标id对应的行作为匹配条件,也能实现需求:
SELECT r.id, r.title FROM records r JOIN records r_target ON r.docId = r_target.docId WHERE r_target.id = 4 AND r.id <= 4;
这里我们把原表别名为r(代表要返回的记录),把目标行所在的表别名为r_target,通过docId关联后,筛选出符合条件的记录。
结果验证
用你提供的示例数据测试,两种方法都会返回预期结果:
[{ id: 4, title: 'd'},{id: 2, title: 'b'},{id: 1, title: 'a'}]
小提示
如果你的数据量较大,建议给id(通常主键默认有索引)和docId字段创建合适的索引,能显著提升查询效率。
内容的提问来源于stack exchange,提问作者user1031947
相关产品推荐
相关产品推荐

