日期:2014-05-19  浏览次数:20631 次

请问一条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)