场景
从一张表中查询某字段是逗号分隔的集合值,需要遍历集合内每个值,将其作为条件去查询另一张表,最终返回列表
编写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;