目录
- 场景
- 编写SQL
- 分页获取该开票单号下的所有订单列表
- 使用子查询和 `in` 字句
- 使用 `find_in_set`
场景
从一张表中查询某字段是逗号分隔的集合值,需要遍历集合内每个值,将其作为条件去查询另一张表,最终返回列表
编写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 订单idsfrom 发票信息表where 发票流水号 = ?limit 1
) as a
left join 订单信息表 as b on find_in_set(b.订单ID, a.订单ids) > 0;