SQL删除所有数据
原创//首先创建测试表
CREATE TABLE [dbo].[test](
[name] [nvarchar](50) NOT NULL,
[age] [int] NOT NULL
) ON [PRIMARY]
GO
//插入测试
INSERT INTO [dbo].[test] VALUES(张三,38)
INSERT INTO [dbo].[test] VALUES(张三,38)
INSERT INTO [dbo].[test] VALUES(李四,43)
INSERT INTO [dbo].[test] VALUES(李四,43)
INSERT INTO [dbo].[test] VALUES(王五,55)
GO
解决方案:
-
无唯一标识列
使⽤ROW_NUMBER()该功能删除重复记录,并根据每个人的数据重复的规则对其进行分组(Partition By),我这边是name和age为了确定数据是否重复,order by只需跟随一个字段并根据重复数据对其进行编号。SELECT Row_Number() OVER(PARTITION BY name, age ORDER BY name) AS RowNumber,* FROM test
SQL操作结果:
从结果可以看出,RowNumber每组数据都已根据您的分组进行编号。
最后将RowNumber大于1的进行Delete。
DELETE T FROM
(SELECT Row_Number() OVER(PARTITION BY name, age ORDER BY name) AS RowNumber,* FROM test)T
WHERE T.RowNumber > 1
-
唯一标识栏
使用HAVING()函数
把test表修改,添加id唯一标识列,新表格数据如下:
SQL操作结果:
使用HAVING()功能,根据分组。COUNT找出每组的数字,较大1是重复数据,然后根据id取最大值或最小值,我的立场是取最大值。SELECT MAX(ID) FROM Student GROUP BY name, age HAVING COUNT(*) > 1
重复使用id后,根据id进行Delete。
DELETE FROM test
WHERE id NOT IN(SELECT MAX(ID) FROM Student GROUP BY name, age HAVING COUNT(*) > 1)
-
使用临时表(用于数据量较小的情况)
//首先,将减重后的数据放入临时表 SELECT DISTINCT name, age INTO #temp_test FROM test
//然后清空正式表中的数据 DELETE FROM test
//最后,将临时表数据导入正式表。 INSERT INTO test SELECT FROM #temp_test
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除