SQL删除所有数据

原创
小哥 3年前 (2022-11-07) 阅读数 38 #大杂烩
//首先创建测试表
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

解决方案:

  1. 无唯一标识列
    使⽤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
  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)
  1. 使用临时表(用于数据量较小的情况)

    //首先,将减重后的数据放入临时表 SELECT DISTINCT name, age INTO #temp_test FROM test

    //然后清空正式表中的数据 DELETE FROM test

    //最后,将临时表数据导入正式表。 INSERT INTO test SELECT FROM #temp_test

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门