MySQL如何编写SQL为每条原表记录生成带yes/no的两条新记录
MySQL实现单条记录拆分为多条的SQL写法
核心思路
利用交叉连接(笛卡尔积)把原表和包含yes/no两个值的临时集合关联,原表每条记录会自动匹配临时集合的两行,实现拆分效果。
具体SQL实现
适用MySQL 8.0+版本(支持窗口函数)
SELECT -- 生成示例要求的连续新ID,不需要可删除此行 ROW_NUMBER() OVER (ORDER BY t.id, v.whatever) AS id, t.a, t.b, v.whatever FROM 你的原表名 t CROSS JOIN ( SELECT 'yes' AS whatever UNION ALL SELECT 'no' AS whatever ) v ORDER BY id;
适用MySQL 5.x及更低版本(不支持窗口函数)
SELECT -- 生成示例要求的连续新ID,不需要可删除此行 @row_num := @row_num + 1 AS id, t.a, t.b, v.whatever FROM 你的原表名 t CROSS JOIN ( SELECT 'yes' AS whatever UNION ALL SELECT 'no' AS whatever ) v -- 初始化自增变量 CROSS JOIN (SELECT @row_num := 0) AS init ORDER BY t.id, v.whatever;
说明
- 把代码里的
你的原表名替换为你实际的表名即可 - 如果不需要输出示例中的连续新ID字段,直接删除对应ID生成的代码行即可
内容的提问来源于stack exchange,提问作者Gorgine
相关产品推荐
相关产品推荐

