У меня есть две таблицы и мне нужно поменять значения столбца в каждой таблице - я могу сделать это, когда они находятся в одной таблице, но когда я пытаюсь сделать это с помощью разных таблиц, второе значение уже перезаписано, поэтому оно теряется.
Например:
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, тогда как мне нужны только отдельные столбцы.
Я считаю, что вам нужно использовать сочетание 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;