如何在同表中复制一列数据到另一列且排除第一条记录
实现方案
前置说明
关系型数据库本身不保证行的物理存储顺序,你需要先指定排序规则来明确定义「第一条记录」,本方案默认以
col1字段升序排序作为行的顺序,完全匹配你给出的示例数据效果。
1. 直接查询得到col2结果(通用,支持MySQL8.0+、PostgreSQL、SQL Server、Oracle等主流数据库)
使用LEAD窗口函数取当前行下一行的col1值作为col2,没有下一行时自动返回null:
SELECT col1, LEAD(col1, 1) OVER (ORDER BY col1) AS col2 FROM 你的表名;
2. 直接更新表的col2字段
2.1 MySQL 8.0+ 版本写法
UPDATE 你的表名 t1 JOIN ( SELECT col1, LEAD(col1, 1) OVER (ORDER BY col1) AS new_col2 FROM 你的表名 ) t2 ON t1.col1 = t2.col1 SET t1.col2 = t2.new_col2;
2.2 不支持窗口函数的旧版MySQL写法
如果你的数据库版本不支持窗口函数,可以用自连接实现:
-- 查询用 SELECT t1.col1, t2.col1 AS col2 FROM 你的表名 t1 LEFT JOIN 你的表名 t2 ON t2.col1 = t1.col1 + 1 ORDER BY t1.col1; -- 更新用 UPDATE 你的表名 t1 LEFT JOIN 你的表名 t2 ON t2.col1 = t1.col1 + 1 SET t1.col2 = t2.col1;
内容的提问来源于stack exchange,提问作者Prabhakar Kumar Jha
相关产品推荐
相关产品推荐

