mysql,update目标表子查询问题?期待

来源:百度知道 编辑:UC知道 时间:2024/06/17 04:29:49
环境:MySql 5.0
现有学生表如下:
+------+--------+------+
| 姓名 | 奖学金 | 分数 |
+------+--------+------+
| 张三 | | 95 |
| 李四 | 1000 | 95 |
| 王五 | | 100 |
| 齐六 | | 100 |
+------+--------+------+
对这张表进行update,条件:将奖学金为空并且分数为100的学生,奖学金设置成2000;

这条语句例外:
update 学生 set 奖学金=2000
where 奖学金 is null and 分数=100;
这条语句可以达到目的,但我要的不是这个结果,用这张表只是在说明一个问题,我需要的是在子查询中去更新这张表的数据;
像下面这条语句:
update 学生 set 奖学金=2000
where 姓名 in
(
select 姓名 from 学生
where 奖学金 is null and 分数=100
);
在Orcale中调试通过,在MySQL中则出现这种错误:
ERROR 1093 (HY000): You can't specify target table '学生' for
update in FROM clause.

在MySQL手册中写到:
一般而言,不能更改表,并从子查询内的相同表进行选择。
例如,该限制适用于具有下述形式的语句:

DELETE FROM t WHERE ... (SELECT ... FROM t ...);
UPDATE t ... WHERE col = (SELECT ... FROM t .

这个例外不解决你的问题
<br>
<br>
<br>update 学生 set 奖学金=
<br>(select 姓名 from 学生
<br>where 奖学金 is null and 分数=100
<br>);
<br>
<br>这样的是被允许的
<br>
<br>mysql对子查询的支持是比较薄弱的

就是说 update的where语句中不能子查询

而在 where之前是可以有子查询的