在 MySql 中串联后将 SELECT 分配给 UPDATE 命令
Assigning SELECT to UPDATE command after concatenating in MySql
我想通过连接用户名中的 4 个字符和员工 table(另一个 table)[=15 中帐号的最后 5 位数字来填充用户 table 中的密码=]
我尝试了下面的查询,但它 returns 是空的。
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 语句时,它 returns 精确值。
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。列 'password' 不能为 null
我试过下面的查询,但同样的错误
UPDATE user password , (SELECT (CONCAT(SUBSTRING(user.username,1,4), SUBSTRING(employee.accountnumber,-5))) FROM employee WHERE user.employeename= employee.employeename);
如果我在 FROM 子句中包含 'user'(table 名称),它会显示错误 错误代码:1093。您不能指定目标 table 'user' 用于 FROM 子句中的更新
所以,我在更新声明中删除了它。
为什么这么复杂?这样做:
UPDATE user u
JOIN employee e ON u.employeename = e.employeename
SET u.password = Concat(Substring(u.username, 1, 4),
Substring(e.accountnumber, -5))
;
我想通过连接用户名中的 4 个字符和员工 table(另一个 table)[=15 中帐号的最后 5 位数字来填充用户 table 中的密码=]
我尝试了下面的查询,但它 returns 是空的。
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 语句时,它 returns 精确值。
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。列 'password' 不能为 null 我试过下面的查询,但同样的错误
UPDATE user password , (SELECT (CONCAT(SUBSTRING(user.username,1,4), SUBSTRING(employee.accountnumber,-5))) FROM employee WHERE user.employeename= employee.employeename);
如果我在 FROM 子句中包含 'user'(table 名称),它会显示错误 错误代码:1093。您不能指定目标 table 'user' 用于 FROM 子句中的更新 所以,我在更新声明中删除了它。
为什么这么复杂?这样做:
UPDATE user u
JOIN employee e ON u.employeename = e.employeename
SET u.password = Concat(Substring(u.username, 1, 4),
Substring(e.accountnumber, -5))
;