2015-10-29 3 views
1

Я хочу, чтобы заполнить пароль в таблице пользователей с помощью конкатенации 4 символов из имени пользователя и последние 5 цифр от ACCOUNTNUMBER в таблице Employee (другую таблицу)Назначение Выберите для обновления команды после конкатенации в MySql

Я попытался ниже запрос, но он возвращает пустой.

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» option.when я выполнить в редакторе он показывает ошибки как код ошибки: 1048. Колонка «пароль» не может быть пустым Я попытался ниже запроса, но та же ошибка

UPDATE user password , (SELECT (CONCAT(SUBSTRING(user.username,1,4), SUBSTRING(employee.accountnumber,-5))) FROM employee WHERE user.employeename= employee.employeename); 

Если я включать «пользователя» (имя таблицы) в ЕКОМ, появляется сообщение об ошибке, как код ошибки : 1093 Вы не можете указать целевую таблицу «пользователя 'для обновления в FROM 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)) 
;