数据库删除相同数据

阿里帽子 2019-08-01 09:13:06
表a 里面有一个字段 有相同数据 怎么删除多余的 保留一个 sql 怎么写? 谢大神
...全文
223 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
吾友客 2019-08-06
  • 打赏
  • 举报
回复
DELETE a FROM a JOIN ( SELECT MIN(Id) Id,Name FROM dbo.a GROUP BY Name HAVING COUNT(1) > 1 ) tmp ON a.Name = tmp.Name AND a.Id <> tmp.Id
XBodhi. 2019-08-04
  • 打赏
  • 举报
回复
思路 第一步 group 出 唯一的 insert 到 #表 (临时表)
第二部删除 原表记录,
第三部在 Insert into table select #表
饮水需思源 2019-08-04
  • 打赏
  • 举报
回复
先在表中增加一个自增标识列,再写语句保存相同其他列的最大或最小标识列
吉普赛的歌 2019-08-03
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('a') IS NOT NULL
DROP TABLE a
GO
CREATE TABLE a(
	id INT IDENTITY(1,1) PRIMARY KEY,
	c1 VARCHAR(10)	
)
GO
SET NOCOUNT ON
INSERT INTO a VALUES ('b');
INSERT INTO a VALUES ('b');
INSERT INTO a VALUES ('c');
INSERT INTO a VALUES ('d');
INSERT INTO a VALUES ('d');
-- 以上为测试表及测试数据

--查看删除前的数据
SELECT * FROM a
/*
id	c1
1	b
2	b
3	c
4	d
5	d
*/

--以 c1 分组,保留同组中id最小的那一条,其它重复数据删除
DELETE t 
FROM (
	SELECT ROW_NUMBER() OVER ( PARTITION BY c1 ORDER BY id) AS rid,* FROM a	
) AS t
WHERE t.rid>1

--查看删除后的数据
SELECT * FROM a
/*
id	c1
1	b
3	c
4	d
*/
X-i-n 2019-08-02
  • 打赏
  • 举报
回复
1. 设计上有先天缺陷,这个字段不设主键至少也要给个唯一索引,从源头上根治重复内容。 2. 你的需求是删除多余记录,那么,怎么判断多条记录中,保留的记录是哪条,请给出明确的“多余”的判断依据。
  • 打赏
  • 举报
回复

	DELETE a FROM a  
JOIN (
    SELECT MIN(Id) Id,Name FROM dbo.a
    GROUP BY Name
    HAVING COUNT(1) >  1
) tmp ON a.Name = tmp.Name AND a.Id <> tmp.Id
Eason0807 2019-08-01
  • 打赏
  • 举报
回复
你这么问,没法给你直接写出SQL语句来的

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧