请问一条SQL语句,具体内容如下: 有关于 Update
请问一条SQL语句,具体内容如下:
有两张表 学生表 成绩表
表的记录:
学生表(姓名,性别,年级,分数)
张三 男 大一 80分
李四 男 大二 90分
成绩表(姓名,分数)
张三 70分
张三 70分
李四 60分
我现在要
Update 学生表
set 分数 = (select 分数 from 成绩表 where 学生表.姓名 = 成绩表.姓名)
可是这样会出现 单行子查询返回多个结果
因此我想加入
Update 学生表
set 分数 = (select 分数 from 成绩表 where 学生表.姓名 = 成绩表.姓名)
where 学生表.姓名 in
(select 姓名 from 成绩表 group by 姓名 having count(*) = 1)
目的就是想跳过张三这个学生,只更新李四的就好了,但是还会出现单行子查询返回多个结果这条错误
请注意: 更新时,是要跳过在成绩表里有重复记录的学生!
谢谢大家!!!
------解决方案--------------------create table 学生表(姓名 varchar(10), 性别 varchar(10), 年级 varchar(10), 分数 varchar(10))
insert 学生表 select '张三 ', '男 ', '大一 ', '80分 '
union all select '李四 ', '男 ', '大二 ', '90分 '
create table 成绩表(姓名 varchar(10), 分数 varchar(10))
insert 成绩表 select '张三 ', '70分 '
union all select '张三 ', '70分 '
union all select '李四 ', '60分 '
update 学生表 set 分数=tmp.分数
from
(
select * from 成绩表 tmp
where (select count(*) from 成绩表 where 姓名=tmp.姓名)=1
)tmp
where 学生表.姓名=tmp.姓名
select * from 学生表
--result
姓名 性别 年级 分数
---------- ---------- ---------- ----------
张三 男 大一 80分
李四 男 大二 60分
(2 row(s) affected)