demo:将emp表中小于平均薪资的员工工资上涨10%
错误语句
UPDATE emp
SET sal=sal*1.1
WHERE sal<(SELECT AVG(sal) FROM emp);
1.You can’t specify target table ‘emp’ for update in FROM clause
原因:如果子查询的语句和更新,删除在同一张表上,MY SQL会出现错误,因此要双重子查询
正确语句 2
UPDATE emp
SET sal=sal*1.1
WHERE sal<ALL(
SELECT e.asal
FROM(
(SELECT AVG(sal) asal FROM emp)
e
)
);
错误2:Every derived table must have its own alias
:每个派生出来的表都必须有一个自己的别名
进行嵌套查询的时候子查询出来的的结果是作为一个派生表来进行上一级的查询的,所以子查询的结果必须要有一个别名
把MySQL语句改成:select count(*) from (select * from ……) as a;