请问一条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)
目的就是想跳过张三这个学生,只更新李四的就好了,但是还会出现单行子查询返回多个结果这条错误
请注意: 更新时,是要跳过在成绩表里有重复记录的学生!
谢谢大家!!!
学生表(姓名,性别,年级,分数)
张三 男 大一 80分
李四 男 大二 90分成绩表(姓名,分数)
张三 70分
张三 70分
李四 60分我现在要
Update 学生表
set 分数 = (select 分数 from 成绩表 where 学生表.姓名 = 成绩表.姓名)可是这样会出现 单行子查询返回多个结果因此我想加入
Update 学生表
set 分数 = (select 分数 from 成绩表 where 学生表.姓名 = 成绩表.姓名)
where 学生表.姓名 in
(select 姓名 from 成绩表 group by 姓名 having count(*) = 1)
目的就是想跳过张三这个学生,只更新李四的就好了,但是还会出现单行子查询返回多个结果这条错误
请注意: 更新时,是要跳过在成绩表里有重复记录的学生!
谢谢大家!!!
from
(
select * from 成绩表 tmp
where (select count(*) from 成绩表 where 姓名=tmp.姓名)=1
)tmp
where 学生表.姓名=tmp.姓名
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)