在两个不同的表之间交换列值

72qzrwbm  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(410)

我有两个表,需要交换每个表中一列的值—当它们在同一个表中时,我可以这样做,但当我尝试对不同的表执行此操作时,第二个值已经被覆盖,因此丢失。
例如:

table1

id user_id currency   col2    col3......
1  1       10         Bob     2018-04-16
2  2       150        Tom     2018-05-17
3  3       60         Phil    2018-06-04
4  4       125        Jon     2017-12-01
5  5       35         Mike    2018-07-21

table2

id user_id salary     col2    col3......
1  1       USD        16      Active
2  2       USD        17      Active
3  3       GBP        21      Left
4  4       CAD        16      Active
5  5       AUD        19      Active

我需要这些看起来像:

table1

id user_id currency   col2    col3......
1  1       USD        Bob     2018-04-16
2  2       USD        Tom     2018-05-17
3  3       GBP        Phil    2018-06-04
4  4       CAD        Jon     2017-12-01
5  5       AUD        Mike    2018-07-21

table2

id user_id salary     col2    col3......
1  1       10         16      Active
2  2       150        17      Active
3  3       60         21      Left
4  4       125        16      Active
5  5       35         19      Active

我试过:

UPDATE table1 t1, table2 t2 
SET t1.currency=t2.salary, t2.salary=t1.currency 
WHERE t1.user_id=t2.user_id;

但这不起作用(货币设置正确,但工资不正确),有可能吗?
在两个表之间交换两列值看起来是一个可行的解决方案,但是解决方案是更改表名,因为所有列都需要交换,而我只需要交换单个列。

xqk2d5yq

xqk2d5yq1#

我相信您需要同时使用ddl和dml来实现这一点。
首先,您需要重命名要交换的列之一,并添加一列以保存新值:

alter table table1 change currency salary int;
alter table table1 add currency varchar(3) after salary;

然后独立更新每个表:

update table1 t1, table2 t2
set t1.currency = t2.salary
where t1.user_id = t2.user_id;

update table1 t1, table2 t2
set t2.salary = t1.salary
where t1.user_id = t2.user_id;

最后删除额外的列:

alter table table1 drop salary;

相关问题