sql 删除重复数据

表数据如下,其中 createname 列中,关键词(英文)、关键词(中文)、基金项目(英文)、基金项目(中文)重复。

现在想实现 去除重复的数据。例如 id 为 71,与21 的关键词(英文),去除关键词为71的关键词(英文),其他的类似。



sql语句

(1)先查出系统中重复的数据,根据 createname

select zazhiid,createname,createid,ishide from J_Create_View

group by ZaZhiID,CreateName,CreateID,IsHide

having(count(CreateName))>1


(2)select zazhiid,createname,createid,ishide,max(id) from J_Create_View

group by ZaZhiID,CreateName,CreateID,IsHide

having(count(CreateName))>1


(3)delete from J_Create_View where id in 

(select max(id) from J_Create_View

group by ZaZhiID,CreateName,CreateID,IsHide

having(count(CreateName))>1) 





### 如何使用SQL删除重复记录或选择唯一数据 #### 删除重复记录 在关系型数据库中,可以通过多种方式删除表中的重复记录。以下是几种常见的方式: 1. **MySQL删除重复记录并保留一条** 使用自连接的方法可以有效地删除重复记录,并仅保留每组重复记录中 `id` 最小的一条记录[^1]。 ```sql DELETE t1 FROM your_table t1 INNER JOIN your_table t2 ON t1.name = t2.name AND t1.id > t2.id; ``` 2. **Oracle 数据库中删除重复记录** Oracle 提供了 `ROWID` 属性作为每一行的唯一标识符。利用此属性,可以选择性地删除重复记录,同时保留一组重复记录中某一行的数据[^2]。 ```sql DELETE FROM your_table WHERE ROWID NOT IN ( SELECT MIN(ROWID) FROM your_table GROUP BY column1, column2, ..., columnN ); ``` 3. **SQL Server 中删除重复记录** 对于 SQL Server,可以通过创建临时表的方式来实现去重操作。具体做法是先将无重复记录的结果存入临时表,随后替换原表的内容[^3]。 ```sql -- 创建临时表存储无重复记录 SELECT DISTINCT * INTO #TempTable FROM your_table; -- 清空原表 TRUNCATE TABLE your_table; -- 将临时表内容重新导入到原表 INSERT INTO your_table SELECT * FROM #TempTable; -- 删除临时表 DROP TABLE #TempTable; ``` 4. **通用方法:基于主键删除重复记录** 借助分组查询和子查询技术,可以从任意支持标准 SQL 的数据库中删除重复记录。以下是一个适用于大多数数据库系统的解决方案[^4]。 ```sql DELETE FROM your_table WHERE id NOT IN ( SELECT MIN(id) FROM your_table GROUP BY name, login_date ); ``` 5. **复杂条件下的重复记录删除** 当需要根据多个字段组合判断重复时,可以扩展上述逻辑以适应更复杂的场景[^5]。 ```sql DELETE FROM lib WHERE (`name`, version) IN ( SELECT t.`name`, t.version FROM ( SELECT `name`, version FROM lib GROUP BY `name`, version HAVING COUNT(*) > 1 ) t ) AND id NOT IN ( SELECT dt.minid FROM ( SELECT MIN(id) AS minid FROM lib GROUP BY `name`, version HAVING COUNT(*) > 1 ) dt ); ``` #### 查询唯一数据 如果只需查询不带重复项的数据而不修改实际表格,则可采用如下方法: - 利用 `DISTINCT` 关键字返回指定列的不同值集合[^3]。 ```sql SELECT DISTINCT column_name(s) FROM table_name; ``` - 或者通过聚合函数配合 `GROUP BY` 子句完成相同目标。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值