请问一条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)
目的就是想跳过张三这个学生,只更新李四的就好了,但是还会出现单行子查询返回多个结果这条错误
请注意: 更新时,是要跳过在成绩表里有重复记录的学生!
谢谢大家!!!

解决方案 »

  1.   

    Update 学生表 set 分数=b.分数 from 成绩表 b where 姓名=b.姓名
      

  2.   

    update 学生表 set 分数=tmp.分数
    from
    (
    select * from 成绩表 tmp
    where (select count(*) from 成绩表 where 姓名=tmp.姓名)=1
    )tmp
    where 学生表.姓名=tmp.姓名
      

  3.   

    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)
      

  4.   

    非常感谢楼上兄弟的帮忙可是发现一奇怪的问题update X set X= tmp.X from (select * from 表名数量 where X = X) tmp如果表名数量 > 2 的话,就会出现错误 “SQL语句未正确结束”