现在表和数据如下:
1.现有需求:将SMITH所在部门的员工工资提高10%。
第一次的代码:
UPDATE emp
SET sal=sal*1.1
WHERE deptno=(SELECT deptnoFROM empWHERE 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.deptnoFROM emp eWHERE 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 deptnoFROM empWHERE ename='SMITH') e );