场景
从一张表中查询某字段是逗号分隔的集合值,需要遍历集合内每个值,将其作为条件去查询另一张表,最终返回列表
编写SQL
分页获取该开票单号下的所有订单列表
使用子查询和 in 字句
-- 优点:如果数据库有合适的索引,在大数据集中更高效
-- 缺点:需要执行两次查询,首先是子查询,然后是主查询
select 订单ID,道具名称,充值时间,充值金额
from 订单信息表
where 订单ID in (
select 订单ids
from 发票信息表
where 发票流水号 = ?
limit 1
)
order by 订单创建时间 desc
offset ? limit ?
使用 find_in_set
-- 优点:一次查询中完成
-- 缺点:在某些数据库系统中可能不是很高效,尤其是在大表中
select b.订单ID,b.道具名称,b.充值时间,b.充值金额
from (
select 订单ids
from 发票信息表
where 发票流水号 = ?
limit 1
) as a
left join 订单信息表 as b on find_in_set(b.订单ID, a.订单ids) > 0;
本文探讨了如何使用SQL子查询和`in`关键字以及`find_in_set`函数来分页获取特定开票单号下的订单列表。子查询在有索引时效率高,但需两次查询;而`find_in_set`则一次查询完成,但在大表中可能效率较低。

4407

被折叠的 条评论
为什么被折叠?



