16.学生表 如下:删除除了自动编号不同,其他都相同的学生冗余信息
自动编号   学号   姓名 课程编号 课程名称 分数
1        2005001  张三  0001      数学    69
2        2005002  李四  0001      数学    89
3        2005001  张三  0001      数学    69

解决方案 »

  1.   

    select 学号
    from 学生表
    group by 学号
    having count(*)>2
    ------------------------不过这样得出的结果只是查出了学号有重复的.不一定能满足你的要求!
      

  2.   

    select * 
    from 学生表
    where 自动编号 in (select  min(自动编号)
                      from 学生表
                       group by 学号,   姓名, 课程编号, 课程名称, 分数)
      

  3.   

    create table student(学号 int ,姓名 int ,年龄 int,性别 varchar(2),系 int)create table 学生表(自动编号 int , 学号 varchar(20) ,  姓名 varchar(20), 课程编号 varchar(20), 课程名称 varchar(20), 分数 int)
    insert into 学生表 values(1       , '2005001',  '张三',  '0001' ,     '数学',    69)
    insert into 学生表 values(2       , '2005002',  '李四',  '0001' ,     '数学' ,   89)
    insert into 学生表 values(3       , '2005001',  '张三',  '0001',      '数学' ,   69)
    select * 
    from 学生表
    where 自动编号 in (select  min(自动编号)
                      from 学生表
                       group by 学号,   姓名, 课程编号, 课程名称, 分数)
    结果
    自动编号        学号                   姓名                   课程编号                 课程名称                 分数          
    ----------- -------------------- -------------------- -------------------- -------------------- ----------- 
    1           2005001              张三                   0001                 数学                   69
    2           2005002              李四                   0001                 数学                   89(所影响的行数为 2 行)
      

  4.   

    create table a
    (自动编号 int,  学号 char(10),  姓名 char(10), 课程编号 char(10), 课程名称 char(10), 分数 int)
    insert a
    select 1        ,'2005001'  ,'张三'  ,'0001'      ,'数学'    ,69
    union all
    select 2        ,'2005002'  ,'李四'  ,'0001'      ,'数学'    ,89
    union all
    select 3        ,'2005001'  ,'张三'  ,'0001'      ,'数学'    ,69select min(自动编号)自动编号,学号,姓名,课程编号,课程名称,分数 from a
    group by  学号,姓名,课程编号,课程名称,分数  自动编号        学号         姓名         课程编号       课程名称       分数          
    ----------- ---------- ---------- ---------- ---------- ----------- 
    1           2005001    张三         0001       数学         69
    2           2005002    李四         0001       数学         89(所影响的行数为 2 行)
      

  5.   

    嘿嘿!!楼主要的是删除相同的学生冗余信息,大家都还没完成楼主的要求!!
    借花献佛,借各位大侠的代码,加点补充!!!
    delete  from a where 自动编号 not in (select min(自动编号)自动编号 from a group by  学号,姓名,课程编号,课程名称,分数) (所影响的行数为 1 行)
      

  6.   

    或者 delete  from a where 自动编号 in (select min(自动编号)自动编号 from a group by 学号 having count(*)>1)
      

  7.   


    delete from 学生表 where 自动编号 in(
    select min(自动编号) from 学生表 group by 学号,课程编号 ,分数 having count(*)>1)我这条语句会把所有相同信息删除,用  huailairen(流浪猫)   的方法倒入一个临时表可得到你的结果
      

  8.   

    delete from student where exists(select 1 from student not exists(select distinct * from student))
      

  9.   

    create table 学生表(自动编号 int , 学号 varchar(20) ,  姓名 varchar(20), 课程编号 varchar(20), 课程名称 varchar(20), 分数 int)
    insert into 学生表 values(1       , '2005001',  '张三',  '0001' ,     '数学',    69)
    insert into 学生表 values(2       , '2005002',  '李四',  '0001' ,     '数学' ,   89)
    insert into 学生表 values(3       , '2005001',  '张三',  '0001',      '数学' ,   69)
    select s.学号,s.姓名,s.课程编号,s.课程名称,s.分数 from 学生表 s group by s.学号,s.姓名,s.课程编号,s.课程名称,s.分数 having count(1)>1
      

  10.   

    delete student where 学号 not in (select 学号 from student group by 学号 having count(学号 )=1)
      

  11.   

    select * from tbl a
    where not exists(select 1 from tbl where 学号=a.学号 and 姓名=b.姓名
    and 课程编号=a.课程编号 and 课程名称=a.课程名称 and 分数=a.分数 and 自动编号<a.自动编号)