Student表如下:(主键 为 sno 并且建立了唯一的聚集索引sno)
sno             sname          ssex     address0123       李欢         男  江西省 ,南昌市
1001       张三         男  广东省,潮州市
1002       李四         男  浙江省,义乌市
1003       小红         女  江西省 ,南昌市
1004       李二         男  广东省,潮州市Course表如下:(主键 为 cno 并且建立了唯一的聚集索引cno)
cno            cnamec01        数学        
c02        英语        
c03        计算机基础     
c04        JAVA数据库系统 SC表如下:(建立的外键有sno,cno)
sno             cno            grade1001       c01        100
1001       c02        100
1001       c03        85
1001       c04        78
1002       c01        100
1002       c02        93
1002       c03        90
1002       c04        100
1003       c01        100
1003       c02        100
1003       c03        100
1003       c04        100
1004       c01        100
1004       c02        100
1004       c03        80
1004       c04        100
我要得出这样的表.如何用SQL命令删除重复的记录,以及如何避免重复记录的插入呢??望名位大侠帮帮忙吧!我用的数据库是SQL Server 2005,在网上也找了不少资料,只解决了删除完全重复的记录,还有一个不完全重复的记录,不知道怎么删??以及避免重复记录的插入。。我实在没办法了,恳请各位大侠帮帮忙

解决方案 »

  1.   

    如原来的是下面的数据
    sno cno grade1001 c01 100
    1001 c01 90
    1001 c02 100
    1001 c03 85
    1001 c04 78
    1002 c01 100
    1002 c01 85
    1002 c02 93
    1002 c03 90
    1002 c04 100
    1003 c01 100
    1003 c02 100
    1003 c03 100
    1003 c04 100
    1004 c01 100
    1004 c02 100
    1004 c03 80
    1004 c04 100删除完后得到
    sno cno grade1001 c01 100
    1001 c02 100
    1001 c03 85
    1001 c04 78
    1002 c01 100
    1002 c02 93
    1002 c03 90
    1002 c04 100
    1003 c01 100
    1003 c02 100
    1003 c03 100
    1003 c04 100
    1004 c01 100
    1004 c02 100
    1004 c03 80
    1004 c04 100
      

  2.   

    在SC表的sno和cno列建个唯一索引,即可防止重复数据CREATE UNIQUE INDEX UIX_SC ON SC(sno,cno);
      

  3.   

    可要是在SC表的sno和cno列建个唯一索引,就得不到我一开始粘贴出来的结果了
      

  4.   

    还有一个不完全重复的记录,不知道怎么删??以及避免重复记录的插入。。我实在没办法了,恳请各位大侠帮帮忙-->>不完全重复的,你删除总得有个条件吧。
    避免重复记录插入只要设置好主键就可以避免了
      

  5.   

    delete a
    from SC a where exists(select 1 from SC where sno=a.sno and cno=a.cno and grade>a.grade)
      

  6.   

    -->>不完全重复的,你删除总得有个条件吧。
    避免重复记录插入只要设置好主键就可以避免了-->>不完全重复的,你删除总得有个条件吧。
    上面已经贴了原来的表和删除后的表,看看那表的变化,就知道我的删除条件了避免重复记录插入只要设置好主键就可以避免了要是我设置了主键就没法得到这样的结果了
    sno cno grade1001 c01 100
    1001 c02 100
    1001 c03 85
    1001 c04 78
    1002 c01 100
    1002 c02 93
    1002 c03 90
    1002 c04 100
    1003 c01 100
    1003 c02 100
    1003 c03 100
    1003 c04 100
    1004 c01 100
    1004 c02 100
    1004 c03 80
    1004 c04 100
    因为那的学号1001 都有重复的,主键不能重复,那学生就只能选择一门学科了,但是呢,学生是可以选择多门学科的,就像我上面的表一样
      

  7.   


    --sno cno gradeselect distinct * 
      into #tb
    from tbdelete from tbinsert into tb
    select * from #tbdrop table #tbdelete t
    from tb t
    where exists (select 1 from tb where sno=t.sno and cno=t.cno and grade>t.grade)
      

  8.   

    应该是用这个  distinct
      

  9.   

    删除操作已经成功了,那如果要得出我下面的结果,有防止重复记录插入的方法不???
    1001 c01 100
    1001 c02 100
    1001 c03 85
    1001 c04 78
    1002 c01 100
    1002 c02 93
    1002 c03 90
    1002 c04 100
    1003 c01 100
    1003 c02 100
    1003 c03 100
    1003 c04 100
    1004 c01 100
    1004 c02 100
    1004 c03 80
    1004 c04 100