选择并删除过期的重复记录?

时间:2012-04-09 02:55:22

标签: mysql duplicates sql-delete

我有一个Grading数据库,看起来像这样:

StudentId | SubjectCode | Grade | DateApproved

Student1 | SUBJ1234 | - | 30-3-2012<br/>
Student1 | SUBJ1234 | 2.25 | 31-3-2012<br/>
Student1 | SUBJ45678 | 2.00 | 31-2012 

如果您注意到,则会有一个过时的副本,其成绩为空白(由"-"表示)。

我想从数据库中选择所有空白成绩,因为我有一个重复项目,但我可以删除它们。

我如何在SQL (MySql 5.5)中执行此操作?

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

SELECT * 
   FROM yourTableName as t1 
   WHERE t1.Grade = "-" 
      AND EXISTS (SELECT * 
                     FROM yourTableName as t2 
                     WHERE t1.StudentId = t2.StudentId 
                         AND t1.SubjectCode = t2.SubjectCode 
                         AND t1.DateApproved < t2.DateApproved
                 )

代码基本上会从您的表格中选择所有字段,其等级设置为-,并且记录具有相同的StudentIdSubjectCode以及更高(更新的) DateApproved

编辑:如果您想要&#34;新&#34;记录以定义Grade-除外),在结束括号之前的内部查询中的最后一个条件之后添加:AND t2.Grade != '-'