编写SQL语句,场景:从一张表中查询某字段是逗号分隔的集合值,需要遍历集合内每个值,将其作为条件去查询另一张表,最终返回列表

目录

  • 场景
  • 编写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 订单ids
    from 发票信息表
    where 发票流水号 = ?
    limit 1
) as a
left join 订单信息表 as b on find_in_set(b.订单ID, a.订单ids) > 0;

你可能感兴趣的:(MySQL,专栏,sql,数据库)