sql删除重复的条目的最简单方法
来源:互联网 发布:软件合同验收报告 编辑:程序博客网 时间:2024/05/21 21:28
评教系统最后的一项工作,就是对数据进行整理,这个万恶之源就是允许了学生自己选课,当然这个功能的开放,也使得老师减少了一点工作量。对于此功能的评价不再多说。下面开始进入话题:
评教系统要删除的不是重复的条目,而是项目比较少的条目。先说下原因:课程的授予,一般是有教学秘书进行授课的,但是漏授的事情频繁发生,这就造成了有的学生上的课,评价界面却没有,负责的学生就自己选了,但是很有可能选错或者只有极个别人选,那么对于此老师教的此课,只有少数人评价,那么这就属于无效数据,是我们要删除的。
下面说下我的思路的一步步转变:
第一印象是从后台界面找到那条记录,查询老师、课程分别对应的ID,再在评价结果表里面进行更改,我没有这样做,也没有去尝试。
我们是学编程的,对于重复的事情,一定不可以自己去做,所以我就努力的想sql语句进行删除。期间进行了各种嵌套,我的思路是首先把评教人次少于10(一般多于10的我们就认为其有一定效应),然后从这个查询出来的结果中提取出来教师ID以及课程ID,然后通过一个delete语句进行删除,
悲剧的是我弄了一整天也没弄出来,我先附一下没有弄出来的代码,希望高手指出怎么才可以修改正确。
delete TheoryResult where TheoryResult.TeacherId in(select c.TeacherId from (select teacherid,courseid,COUNT(*) as tcount from TheoryResultwhere yearTermNo='201201'group by TeacherId,CourseId--with rolluphaving COUNT(*)<10) as c) and TheoryResult.CourseId in (select c.TeacherId from (select teacherid,courseid,COUNT(*) as tcount from TheoryResultwhere yearTermNo='201201'group by TeacherId,CourseId--with rolluphaving COUNT(*)<10) as c)and yearTermNo='201201'TheoryResult是评价结果表,201201是一个时间限定,说明是2012年上半年,其他的with rollup被注释掉了,这里用不上。我的这个代码完全是按照上面的思路进行的,但是没有成功。
后来果断选择更简单的方法,那就是通过程序将其进行关联。代码是最美的,也是最能说明白问题的,下面看代码:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;using System.Data;namespace deleteillegaldata{ public partial class frmMain : Form { public frmMain() { InitializeComponent(); } private void btnDeleteIllegalData_Click(object sender, EventArgs e) { SqlConnection sqlConn=new SqlConnection("server="+txtServer.Text.Trim()+";database=Evaluation201201;uid=sa;pwd=123456;"); SqlConnection sqlConn1 = new SqlConnection("server=" + txtServer.Text.Trim() + ";database=Evaluation201201;uid=sa;pwd=123456;"); sqlConn.Open(); sqlConn1.Open(); SqlCommand sqlCmd=new SqlCommand("select teacherid,courseid,COUNT(*) as tcount from TheoryResult where yearTermNo='201201' group by TeacherId,CourseId having COUNT(*)<10",sqlConn); SqlDataReader sqlDtr =sqlCmd.ExecuteReader(); while(sqlDtr.Read()) { SqlCommand sqlCmd1=new SqlCommand("delete TheoryResult where TeacherId='" + sqlDtr[0] + " ' and CourseId='"+sqlDtr[1]+"' and yearTermNo='201201'",sqlConn1); sqlCmd1.ExecuteNonQuery(); } MessageBox.Show("删除成功"); sqlConn.Close(); sqlConn1.Close(); } }}用了一个while循环,这个效率的问题嘛,是低一点点,但是比你手动删除要快很多,个人感觉还是sql语句执行的要快点,所以写成存储过程可能会好一点点。
看到这里你是不是感觉有种上当的感觉呢?其实没有,删除重复的条目嘛,其实用这个修改一下完全可以的哦,只是提供一个思路,就是把要检查的重复列在group by中体现,在while循环中套一个for循环,for循环对tcount进行遍历,如果有3个,你删除2个那样不可以了嘛。
- sql删除重复的条目的最简单方法
- SQL删除逻辑重复记录的最简方法
- RecyclerView上下拖动条目排序,左右划出屏幕删除条目的最简单的实现
- 最高效的删除重复记录方法
- Sql Server表中删除重复记录最简单方法(多字段重复)
- SQL删除重复记录的方法
- 删除重复数据的sql方法
- SQL删除重复记录的方法
- SQL Server删除重复行的方法
- sql中删除重复记录的方法
- sql删除重复数据的详细方法
- Sql删除重复记录的方法
- SQL删除重复数据的方法
- sql级联删除,有外键引用级联删除,最简单的方法,SQL级连删除,级连删除
- sql删除重复条目只保留一条
- 请给Array本地对象增加一个原型方法,它的用途是删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。
- 请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组
- RecyclerView的notifyItemRemoved()方法删除条目问题
- PHP.ini 安全相关配置详解
- 自绘对话框标题栏
- 常遇到的异常
- WWDC2012前瞻:iOS 6,新的Mac和美洲狮等值你期待
- WWDC2012前瞻:iOS 6,新的Mac和美洲狮等值你期待
- sql删除重复的条目的最简单方法
- 一些心得
- SQL Server 2005无法远程连接的解决方法
- C/C++函数调用约定和函数名称修饰规则
- discuz!nt用户整合
- C++无符号数与有符号数的判断方法
- #include <sys/types.h>的作用
- GDAL for WINCE编译与配置
- eclipse查看SDK源码设置