Назначение SELECT команде UPDATE после объединения в MySql
Я хочу заполнить пароль в пользовательской таблице, объединяя 4 символа из имени пользователя и последние 5 цифр из accountnumber в таблице Employee (другая таблица)
Я пробовал приведенный ниже запрос, но он возвращает пустой.
SET SQL_SAFE_UPDATES=0;
UPDATE user set password = (SELECT (CONCAT(SUBSTRING(user.username,1,4), SUBSTRING(employee.accountnumber,-5))) FROM employee WHERE user.employeename= employee.employeename);
SET SQL_SAFE_UPDATES=1;
Когда я пробовал SELECT утверждение отдельно в редакторе, он возвращает точные значения.
SELECT (CONCAT(SUBSTRING(user.username,1,4), SUBSTRING(employee.accountnumber,-5))) as pwd
FROM employee ,user WHERE user.employeename= employee.employeename;
xxxx03332
yyyy07674
Но в операторе UPDATE это не работает, так как я устанавливаю столбец пароля в качестве опции "NOT NULL". Когда я выполняюсь в редакторе, он показывает ошибку как код ошибки: 1048. Столбец "пароль" не может быть пустым, я пробовал ниже запроса, но та же ошибка
UPDATE user password , (SELECT (CONCAT(SUBSTRING(user.username,1,4), SUBSTRING(employee.accountnumber,-5))) FROM employee WHERE user.employeename= employee.employeename);
Если я включаю 'user'(имя таблицы) в предложение FROM, это показывает ошибку в виде кода ошибки: 1093. Вы не можете указать целевую таблицу 'user' для обновления в предложении FROM. Итак, я удалил это в выражении UPDATE.
1 ответ
Почему так сложно? Сделай это так:
UPDATE user u
JOIN employee e ON u.employeename = e.employeename
SET u.password = Concat(Substring(u.username, 1, 4),
Substring(e.accountnumber, -5))
;