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

环境:MySql5.0现有学生表如下:+------+--------+------+|姓名|奖学金|分数|+------+--------+------+|张三||95... 环境: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 ...);
{INSERT|REPLACE} INTO t (SELECT ... FROM t ...);

例外:如果为FROM子句中更改的表使用子查询,前述禁令将不再适用。
例如:

UPDATE t ... WHERE col = (SELECT (SELECT ... FROM t...)
AS _t ...);

禁令在此不适用,这是因为FROM中的子查询已被具体化为临时表,因此 “t”中的相关行已在满足“t”条件的情况下、在更新时被选中。

对这个例外将怎么使用,没有能够明白,希望高手指点迷津!
由于我的积分处于0状态,所以无法贡献积分,敬请谅解!
表的结构是这样的:在这里显示的不是很好

姓名 奖学金 分数
张三 null   95
李四 1000   95
王五 null   100
齐六 null   100

我用的数据库是MYSQL,您可以把那个 例外 给解释一下吗?
展开
 我来答
百度网友460b538
2007-05-18 · TA获得超过696个赞
知道小有建树答主
回答量:707
采纳率:100%
帮助的人:915万
展开全部
这个例外不解决你的问题
<br>
<br>
<br>update 学生 set 奖学金=
<br>(select 姓名 from 学生
<br>where 奖学金 is null and 分数=100
<br>);
<br>
<br>这样的是被允许的
<br>
<br>mysql对子查询的支持是比较薄弱的

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

而在 where之前是可以有子查询的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式