mysql 不支持 update 子查询更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 不支持 update 子查询更新相关的知识,希望对你有一定的参考价值。
update result r inner join(select re.studentno from result re where re.SubjectId=(
select su.subjectno from subject su where su.subjectname='深入.NET平台和C#编程'
)
and examdate=(
select max(examdate) from result where subjectid=(
select subjectno from subject where subjectname='深入.NET平台和C#编程'
)
) and studentresult>80) b on r.StudentNo=b.StudentNo
set r.studentresult=r.studentresult+2
where studentresult<=100;
高手帮忙看看 查询更新不辽 在帮忙看看这道题怎么做 mysql数据库
检查“Java Logic”课程最近一次考试。如果有 80分以上的成绩,则每人提2分;否则,每人提5分。最终的成绩不得大于100分
第一步:采用EXISTS检测是否有人考试成绩达到80分以上
第二步:如果成绩有80分以上的,UPDATE语句为参加本次考试的每名学生加2分;否则加5分
update 时,更新的表不能在set和where中用于子查询;
update 时,可以对多个表进行更新(sqlserver不行);
你这个问题 可以使用3元计算的方法来解决
没超过100分的 低于80 加5 小于等于98 +2 否则+1
update result set studentresult =IF(studentresult<80,studentresult+2,if(studentresult<=98,studentresult+2,studentresult+1)) where studentresult<100
and subjectname='深入.NET平台和C#编程'
代码结果测试了
注意 result: 表名 studentresult :字段名 subjectname:科目名
mysql 的delete from 和update子查询限制
最经做项目时发现的问题,好像在update时也有。。。
网上查到的资料如下:
1.使用mysql进行delete from操作时,若子查询的 FROM 字句和更新/删除对象使用同一张表,会出现错误。
mysql> DELETE FROM tab1 WHERE col1 = ( SELECT MAX( col1 ) FROM tab1 );
ERROR 1093 (HY000): You can’t specify target table ‘tab1′ for update in FROM clause
针对“同一张表”这个限制,撇开效率不谈,多数情况下都可以通过多加一层select 别名表来变通解决,像这样
DELETE FROM tab1
WHERE col1 = (
SELECT MAX( col1 )
FROM (
SELECT * FROM tab1
) AS t
);
或这样
delete from theTable where id in
(
select id from
(
select min(id) id from theTable group by title HAVING count(*)>1
) ids
) ;
------------------------------------------------------------------------
2. mysql delete from where in 时后面 的查询语句里不能加where条件
Sql代码
delete from `t_goods` where fi_id in (select * from ( select fi_id from `t_goods` where fs_num is null and fs_name is null and fs_type is null and fs_using is null and fs_lifetime is null) b)
Sql代码
delete from `t_goods` where fi_id in (select fi_id from `t_goods` where fs_num is null and fs_name is null and fs_type is null and fs_using is null and fs_lifetime is null)
Sql代码
delete from `t_goods` where fi_id in ( select fi_id from `t_goods` )
上面三种情况,只有中间的不能执行。
综合起来就是mysql delete from where in 时后面 的查询语句里不能加where条件
---------------------------------------------------------------------------
3. delete from table... 这其中table不能使用别名
Sql代码
delete from student a where a.id in (1,2);(执行失败)
select a.* from student a where a.id in (1,2);(执行成功)
以上是关于mysql 不支持 update 子查询更新的主要内容,如果未能解决你的问题,请参考以下文章
AWS Athena:不支持的相关子查询类型,但它适用于 Mysql 和其他风格
count in mysql update mysql查询,报错支持