如何在MySQL中将单条数据扩展为带序号的多条记录?
MySQL实现每个ID生成1-5序号的方法
你可以通过**交叉连接(CROSS JOIN)**结合数字序列的方式实现需求,以下是两种可行方案:
方案一:使用临时数字表(兼容所有MySQL版本)
直接构造包含1-5的临时数据集,和原表做交叉连接,让每个ID对应所有序号:
SELECT t.id, n.seq FROM tags t CROSS JOIN ( SELECT 1 AS seq UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) n ORDER BY t.id, n.seq;
方案二:使用递归CTE(MySQL 8.0及以上版本)
利用递归公共表达式生成1-5的序列,再和原表交叉连接,适合需要动态调整序号范围的场景:
WITH RECURSIVE seq_num AS ( SELECT 1 AS seq UNION ALL SELECT seq + 1 FROM seq_num WHERE seq < 5 ) SELECT t.id, s.seq FROM tags t CROSS JOIN seq_num s ORDER BY t.id, s.seq;
两种方案执行后都会输出你需要的格式:每个ID对应1到5的序号,按ID和序号排序。
内容的提问来源于stack exchange,提问作者codename_47
相关产品推荐
相关产品推荐

