Назначение 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)) 
;
Другие вопросы по тегам