以SQL Server查重:高效把班级学生作业去重









如今进行数据处理时,查重问题成为必不可少的一部份,如学校学生班级作业,在传统方法处理时耗时间费力。本文即利用SQL Server技术来查重,以提升效力,高效处理学生作业去重的问题。



步骤1,如果查重表和比对表的数据列相同,则编写SQL语句中使用”IN”或“JOIN”语句。



如SQL语句:


`SELECT DISTINCT StudentID


FROM [School].[dbo].[Class1_HW]


WHERE StudentID


IN (SELECT StudentID


FROM [School].[dbo].[Class2_HW])`



步骤2,如果要比较的数据列不一致,则可使用“EXISTS”语句,如:



`SELECT DISTINCT StudentID


FROM [School].[dbo].[Class2_HW]


WHERE EXISTS (SELECT *


FROM [School].[dbo].[Class1_HW]


WHERE [School].[dbo].[Class1_HW.StudentName]=


[School].[dbo].[Class2_HW.StudentName])`



步骤3,如上述两种方法没法使用且需要比较空置列,则可以编写以下批处理(Batch)语句把所有相关字段添加到查重表中构成一个新表,然后使用查重表来解决去重问题。



例:



`DECLARE @Count INT


SET @Count = 0



IF EXISTS(SELECT * FROM [School].[dbo].[Class1_HW])


BEGIN


INSERT INTO [School].[dbo].[Class_HW_Temp]


SELECT *,@Count


FROM [School].[dbo].[Class1_HW]


SET @Count = @Count + 1


END



IF EXISTS(SELECT * FROM [School].[dbo].[Class2_HW])


BEGIN


INSERT INTO [School].[dbo].[Class_HW_Temp]


SELECT *,@Count


FROM [School].[dbo].[Class2_HW]


SET @Count = @Count + 1


END



SELECT DISTINCT *


FROM [School].[dbo].[Class_HW_Temp]


WHERE [School].[dbo].[Class_HW_Temp].[Count] = @Count`



步骤4, 如果上述方法没法使用,仍可使用函数来定义一个查重表来解决去重问题,搭建终了后为查重表添加索引以加速去重处理。如:



`CREATE FUNCTION [dbo].[fn_DedCheck](@tbl_name VARCHAR(50))


RETURNS @M_Tbl TABLE (ClassName VARCHAR(50))



BEGIN


INSERT @M_Tbl


SELECT DISTINCT ClassName


FROM [School].[dbo].[@tbl_name] WITH(INDEX(Class_IX1))


RETURN


END



SELECT * FROM [dbo].[fn_DedCheck](‘Class1_HW’)`



以上就是以SQL Server方法来查重,高效把班级学生作业去重的方法。为此,对使用上述方法去重数据查重有一定要求:


(1)以可查出的唯一条件来查重,减少无意义的查重;


(2)提早利用现有的Batch技术来提取去重的相关数据;


(3)构建一个查重表,添加索引来加速处理速度。



综上,利用SQL Server技术可以更加高效力把班级学生作业去重,大幅度提升效力,节省时间,改变传统思惟,有效摆脱冗杂作业,把更多时间投入在检查作业质量,欣赏和收藏来自学生的原创作品。