文章目录
- Mysql中如何实现两列的值互换
- 1、第一感觉此sql应该能处理问题了
- 2、需要一个地方存要替换的值,不然两列搞不定。
- 2.1 加第三列?(能解决,但是看起来呆呆)
- 2.2 上临时表(搞点弯路走走)
- 示例sql
Mysql中如何实现两列的值互换
如图,因业务要求,需要把某两列的值互换。
1、第一感觉此sql应该能处理问题了
UPDATE students
SET name = other_name,other_name = name;
结果是这样。。。没搞定
2、需要一个地方存要替换的值,不然两列搞不定。
2.1 加第三列?(能解决,但是看起来呆呆)
-- 新增列
ALTER TABLE students
ADD COLUMN swap_col VARCHAR(255);-- 赋值
UPDATE students
SET swap_col = other_name;UPDATE students
SET other_name = name;UPDATE students
SET name = swap_col;-- 删除列
ALTER TABLE students
DROP COLUMN swap_col;
--
2.2 上临时表(搞点弯路走走)
-- 创建临时表
CREATE TEMPORARY TABLE `students_temp`
(`id` int,`name` varchar(255),`other_name` varchar(255),INDEX `idx_id` (`id`),INDEX `idx_name` (`name`),INDEX `idx_other_name` (`other_name`)
);-- 给临时表赋值
INSERT INTO students_temp
SELECT id, name, other_name
FROM students;-- 联表更新
UPDATE students AS targetINNER JOIN students_temp AS sourceON target.id = source.id
SET target.name = source.other_name,target.other_name = source.name;-- 删除临时表
DROP TABLE students_temp;
示例sql
DROP table if exists `students`;CREATE TABLE `students` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`other_name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
);INSERT INTO `students` VALUES (1, '张三', '张三1');
INSERT INTO `students` VALUES (2, '李四', '李四1');
INSERT INTO `students` VALUES (3, '王五', '王五1');
INSERT INTO `students` VALUES (4, '赵六', '赵六');
INSERT INTO `students` VALUES (5, '孙七', '孙七');
INSERT INTO `students` VALUES (6, '张三', '张三2');
INSERT INTO `students` VALUES (7, '李四', '李四2');
INSERT INTO `students` VALUES (8, '张三', '张三3');