mysql报错:ERROR 1248 (42000): Every derived table must have its own alias

本文解决了一个常见的MySQL更新语句错误,当尝试更新一个表中特定部门员工的工资时,遇到了两个错误:“Every derived table must have its own alias”和“You can't specify target table for update in FROM clause”。通过调整子查询的结构,最终成功更新了目标部门的员工工资。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在表和数据如下:

1.现有需求:将SMITH所在部门的员工工资提高10%。

第一次的代码:

UPDATE emp
SET sal=sal*1.1
WHERE deptno=(SELECT deptno
              FROM emp
              WHERE ename='SMITH')

2.报错如下:

ERROR 1248 (42000): Every derived table must have its own alias

意思是每个派生表都必须有自己的别名。

3.我就给它个子查询的别名。第二次的sql如下:

UPDATE emp
SET sal=sal*1.1
WHERE deptno=(SELECT e.deptno
              FROM emp e
              WHERE e.ename='SMITH')

4.报错如图,

ERROR 1093 (HY000): You can't specify target table 'emp' for update in FROM clause

意思是说不能对进行查询操作的表进行update操作,也就说我们的where条件中进行了子查询,并且子查询也是针对需要进行update操作的表的,mysql不支持这种查询修改的方式。

5.抱着不放弃的精神,摸索和百度,让我在子查询多加一层查询方式,不是直接获得,而是间接获得就行了。

UPDATE emp
SET sal=sal*1.1
WHERE deptno=(SELECT e.deptno FROM (SELECT deptno
              FROM emp
              WHERE ename='SMITH') e );

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值