SQL中如何删除重复数据,只保留其中一行

结论:通过分组和子存在查询删除重复条目。

测试数据: CREATE TABLE [dbo].[人员]([ID] INT IDENTITY(1 ,1 ) NOT NULL,[姓名] VARCHAR(2 0) NULL,[年龄] INT NULL,[地址] VARCHAR(2 0) NULL,[性别] CHAR(2 ) NULL); SET IDENTITY_INSERT [dbo].[人] ON; INSERT INTO [dbo].[人](ID,姓名,年龄,地址,性别) VALUES(1 ,'张三',1 8 ,'北京路1 8 号','男'),(2 ,'李西',1 9 ,'北京路2 9 号','男'),(3 ,'王五',1 9 ,'南京1 1 号路','女'),(4 ,'张三',1 8 ,'北京路1 8 号','男'),(5 ,'李四',1 9 ,'北京路2 9 号','男'),(6 ,'张三',1 8 ,'北京路1 8 号','男'),(7 ,'王五',1 9 ,'南京路1 1 号',"女"), (8 、《马六》、1 8 、《南京路1 9 号》、《女人》); SET IDENTITY_INSERT [dbo].[Person] OFF;
查找重复数据: SELECT MAX(ID) ID、姓名、年龄、地址、性别 作者:dbo.Person 按姓名、年龄、地址、性别分组 HAVING COUNT() > 1 ;
删除重复数据: 从人员中删除 哪里存在( 选择 加班( SELECT MAX(ID) ID、姓名、年龄、地址、性别 作者:dbo.Person 按姓名、年龄、地址、性别分组 得分() > 1 )T WHERE Person.Name = T.Name 并且 Person.Age = T.Age 并且 Person.Address = T.Address 并且 Person.Sex = T.Sex 和 Person.ID T.ID );
结果: 马六将被保存,其他重复条目将被删除。

sql查询去重复数据 sql查询去重

哎呀,过去 1 0 年我们一直在研究数据库,在删除重复项时遇到了很多陷阱。
说到这里,最常用的关键字是 DISTINCT 关键字。
它很简单,一使用就可以工作。

我记得在 2 01 9 年,我们的一个项目有一个包含重复电话号码的用户表。
当时我直接使用SELECT DISTINCT Telephone FROM测试语句解决了。
这就像我家乡的一个筛子,筛掉所有重复的东西。

另外,在 2 02 0 年,我有一个项目需要使用 GROUP BY 子句。
最初我想用它来删除重复项,但事实证明我需要将它与聚合函数结合使用。
否则就浪费了。
当时我创建了一个 SELECT Phone COUNT() FROM test GROUP BY Telephone。
查看结果,我们可以清楚地看到每个电话号码出现了多少次。

但是,有时情况会变得复杂,需要使用临时表。
例如,2 02 1 年,我的一个表中重复数据太多,所以我先创建了一个临时表,过滤掉不重复的数据,然后操作原始表。
操作首先是 SELECT DISTINCT INTO temp FROM a_dist,然后是 DELETE FROM a_dist,最后是 INSERT INTO a_dist SELECT FROM temp。
此过程必须小心执行,因为您可能会意外删除数据。

至于UNION关键字,它主要用于连接两个表中的数据,对于重复数据删除很有用。
我记得在 2 02 2 年,我需要合并两个表中的数据,所以我运行 SELECT column1 FROM table1 UNION SELECT column1 FROM table2 并得到结果。

换句话来说,去重没有固定的模式,必须根据你的具体情况而定。
DISTINCT 是最常见的。
对于更复杂的情况,请使用 GROUP BY、临时表或 UNION。
但请记住,这个问题应该根据实际情况来决定,而不是盲目跟风。

sql中如何删除重复的行啊 我每次执行后都多出重复的行,可是不知道怎么删除掉,谁帮帮忙 在线等答案

粗略地说,处理表中重复的 PK 值实际上非常简单,但过程有点复杂,因为需要几个步骤来保证数据一致性。
首先,您需要运行 GROUP BY 查询来确定重复的 PK 值以及其中有多少个。
比如我们去年跑的一个项目中,我们使用了如下查询: SELECT col1 , col2 , count() INTO Holdkey FROM t1 GROUP BY col1 , col2 HAVING count() > 1 这里我们关心的是当每组中的重复次数超过1 的时候。

还有一点就是需要将重复的键值放到临时表中。
这可以使用以下查询来完成:SELECT DISTINCT t1 INTO Hold FROM t1 , Holdkey 其中 t1 .col1 = Holdkey.col1 AND t1 .col2 = Holdkey.col2 这一步很关键,因为它确保我们将所有重复的行放在一起。

还有一个更重要的细节。
您需要检查拘留表中的键是否唯一。
起初我以为很简单,但后来我发现这是错误的。
如果源表t1 中存在重复的PK值,则Holdups表中的行可能不唯一。
您需要执行 SELECT col1 , col2 , count() FROMholddups GROUP BY col1 , col2 进行检查。
如果每行返回值 1 ,则意味着没有重复的键,也没有唯一的行。

等等,还有一件事:如果您发现重复的键但唯一的行,您必须决定保留哪些行。
通常,这可能意味着删除行或创建新的唯一键值。
完成此步骤后,您可以从源表中删除重复行并使用 DELETE 和 INSERT 语句来执行此操作。
说实话,这很令人困惑。
很多人没有注意到这一点,但我认为值得一试,因为它可以显着提高效率。