刚学数据库,老师布置的上机作业:
     假设课程表中的课程ID的数据类型为自动增量整型(唯一,不会重复),请删除其它字段完全相同的重复多余的脏记录数据。  我编了一小段如下:
delete 
from course,(select *
 from course 
 group by 课程名称
 having count(*)>=2 and count(任课教师)=1)as result,
where result.课程ID=course.课程ID and course.课程ID not exists 
(select min(课程ID)
from course
group by 课程名称);
其中course表中属性:课程ID、课程名称、任课教师。执行后sqlserver2000报错:
服务器: 消息 170,级别 15,状态 1,行 236
第 236 行: ',' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,行 239
在关键字 'as' 附近有语法错误。我们上课时老师也有举相似的例子,所以我不知这里的“语法错误”究竟指什么?或是我写的本身就有错?哪位高手帮看看,谢谢啦~

解决方案 »

  1.   

    delete  
    from course,(select *
     from course  
     group by 课程名称
     having count(*)>=2 and count(任课教师)=1)as result,---这里多了个,号
    where result.课程ID=course.课程ID and course.课程ID not exists  
    (select min(课程ID)
    from course
    group by 课程名称);
      

  2.   

    delete course from course t where ID not in (select min(id) from course where 课程名称 = t.课程名称 and 任课教师 = t.任课教师)delete course from course t where ID not in (select max(id) from course where 课程名称 = t.课程名称 and 任课教师 = t.任课教师)
      

  3.   

    delete  course
    from course,(
    select *
    from course  
    group by 课程名称
    having count(*)>=2 and count(任课教师)=1
    ) as result
    where result.课程ID=course.课程ID 
    and course.课程ID not in  
    (select min(课程ID)
    from course
    where result.课程ID=课程ID
    group by 课程名称);
      

  4.   

    delete  course
    from course,(
    select *
    from course  
    group by 课程名称
    having count(*)>=2 and count(任课教师)=1
    ) as result
    where result.课程ID=course.课程ID 
    and course.课程ID not in  
    (select min(课程ID)
    from course
    group by 课程名称);
      

  5.   


    我刚才试了,有新报错:
    服务器: 消息 8120,级别 16,状态 1,行 236
    列 'course.课程ID' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
    服务器: 消息 8120,级别 16,状态 1,行 236
    列 'course.任课教师' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。我course表中的数据如下:
    ==================================
    课程ID   课程名称  任课教师
    1         SQL       高老师
    2         网络基础  彭老师
    3         网络基础  彭老师
    4         网络基础  彭老师
    5         高等代数  韦老师
    ==================================
      

  6.   

    create table course(课程ID int,课程名称 varchar(10) , 任课教师 varchar(10))
    insert into course values(1, 'SQL'      ,'高老师')
    insert into course values(2, '网络基础' ,'彭老师')
    insert into course values(3, '网络基础' ,'彭老师')
    insert into course values(4, '网络基础' ,'彭老师')
    insert into course values(5, '高等代数' ,'韦老师')
    go
    delete course from course t where 课程ID not in (select min(课程ID) from course where 课程名称 = t.课程名称 and 任课教师 = t.任课教师)select * from coursedrop table course/*
    课程ID        课程名称       任课教师       
    ----------- ---------- ---------- 
    1           SQL        高老师
    2           网络基础       彭老师
    5           高等代数       韦老师(所影响的行数为 3 行)*/create table course(课程ID int,课程名称 varchar(10) , 任课教师 varchar(10))
    insert into course values(1, 'SQL'      ,'高老师')
    insert into course values(2, '网络基础' ,'彭老师')
    insert into course values(3, '网络基础' ,'彭老师')
    insert into course values(4, '网络基础' ,'彭老师')
    insert into course values(5, '高等代数' ,'韦老师')
    go
    delete course from course t where 课程ID not in (select max(课程ID) from course where 课程名称 = t.课程名称 and 任课教师 = t.任课教师)select * from coursedrop table course/*
    课程ID        课程名称       任课教师       
    ----------- ---------- ---------- 
    1           SQL        高老师
    4           网络基础       彭老师
    5           高等代数       韦老师(所影响的行数为 3 行)*/
      

  7.   

    感谢3楼!!我试过了,可以!开始说实话有点没看懂,因为没理解course t,现在理解了!非常感谢!