У меня странная проблема.
У меня довольно большая база данных с двумя таблицами. Мне нужно изменить содержимое столбца с имени на идентификатор, который уже существует в другой таблице.
Пример:
У меня есть таблица, которая содержит столбец «Имя»
столбец name содержит лиц «фамилия, имя», как показано
Name | othercolumn
Smith, John |
Я хотел бы изменить содержимое столбца имени на идентификатор персонала, связанный с именем человека.
Штатное расписание
staffID | firstName | lastName
1 john smith
Мой конечный результат должен быть
Name | othercolumn
1 |
Я перепробовал все виды соединений и конкатов, но, похоже, не могу понять это из-за моего ограниченного знания MySQL. Есть ли способ сделать это без необходимости делать это вручную? Запятая, кажется, дает мне много горя. Спасибо!
Вы должны быть очень осторожны с этим. Во-первых, я предполагаю, что StaffId
это число. Итак, добавьте столбец в таблицу:
alter table t add StaffId int;
Затем обновите этот столбец:
update t join
staff s
on t.name = concat_ws(',', s.lastname, s.firstname)
set t.StaffId = s.StaffId;
Обратите внимание, что после того, как вы это сделали, вы можете StaffId
значения, которые NULL
:
select t.*
from t
where t.StaffId is null;
Это имена, которых нет в staff
Таблица. Они требуют больше работы. Когда вы закончите, вы можете бросить name
колонка.
Других решений пока нет …