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,您可以把那个 例外 给解释一下吗? 展开
现有学生表如下:
+------+--------+------+
| 姓名 | 奖学金 | 分数 |
+------+--------+------+
| 张三 | | 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,您可以把那个 例外 给解释一下吗? 展开
1个回答
展开全部
这个例外不解决你的问题
<br>
<br>
<br>update 学生 set 奖学金=
<br>(select 姓名 from 学生
<br>where 奖学金 is null and 分数=100
<br>);
<br>
<br>这样的是被允许的
<br>
<br>mysql对子查询的支持是比较薄弱的
就是说 update的where语句中不能子查询
而在 where之前是可以有子查询的
<br>
<br>
<br>update 学生 set 奖学金=
<br>(select 姓名 from 学生
<br>where 奖学金 is null and 分数=100
<br>);
<br>
<br>这样的是被允许的
<br>
<br>mysql对子查询的支持是比较薄弱的
就是说 update的where语句中不能子查询
而在 where之前是可以有子查询的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询