Поменять значения столбцов в 2 разных таблицах

0

У меня есть две таблицы и мне нужно поменять значения столбца в каждой таблице - я могу сделать это, когда они находятся в одной таблице, но когда я пытаюсь сделать это с помощью разных таблиц, второе значение уже перезаписано, поэтому оно теряется.

Например:

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;

но это не работает (валюта устанавливается правильно, но не зарплата), можно ли это сделать?

Обмен значениями двух столбцов между двумя таблицами выглядел как возможное решение, но решение меняет имена таблиц, поскольку все столбцы нуждаются в swopped, тогда как мне нужны только отдельные столбцы.

Теги:
swap

1 ответ

0

Я считаю, что вам нужно использовать сочетание 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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню